최고의 스위프트 등록 튜토리얼 2024년, 이 튜토리얼에서는 스토어 등록,지연 스토리지 속성,변수의 예,계산 속성,읽기 전용 계산 속성,부동산의 옵저버,글로벌 및 로컬 변수,부동산 유형,얻고 속성 유형 값을 설정할,를 배울 수 있습니다.
특정 클래스, 구조 또는 열거 협회와 스위프트 속성 값.
속성 저장 특성으로 나누어 특성을 계산할 수있다 :
스토어 등록 | 계산 속성 |
---|---|
상수 또는 변수 저장 부의 일례로서 | (오히려 저장하는 것보다) 계산 된 값 |
클래스 및 구조에 대한 | 클래스, 구조체, 및 열거를위한 |
저장 특성 및 속성은 일반적으로 특정 유형의 인스턴스를 계산하는 데 사용됩니다.
속성이 속성은 type 속성을 호출, 유형 자체에 직접 사용할 수 있습니다.
또한, 사용자 지정 작업을 트리거하기 위해, 속성 값의 변화를 모니터링 할 수있는 속성 관찰자를 정의 할 수 있습니다. 속성 뷰어는 상위 클래스에서 상속 된 속성에 첨가 될 수있다 자신의 메모리 속성을 쓰기 위해 첨가 될 수있다.
간단히 말해, 메모리 속성은 내부의 특정 클래스 또는 구조체의 인스턴스에 저장된 상수 또는 변수이다.
스토리지 속성 (키워드 var에 의해 정의) 변수 스토리지 속성이 될 수 있습니다, 또한 (키워드하자에 의해 정의 된) 일정 스토리지 속성이 될 수 있습니다.
정의가 저장 될 때 당신은 속성의 기본 값을 지정할 수 있습니다
또한 설정 또는 건설 중 자산의 저장 값을 수정, 심지어 일정한 저장 속성 값을 수정할 수 있습니다
import Cocoa struct Number { var digits: Int let pi = 3.1415 } var n = Number(digits: 12345) n.digits = 67 print("\(n.digits)") print("\(n.pi)")
위의 프로그램 실행 출력은 다음과 같습니다
67 3.1415
다음 코드를 살펴 보자 :
let pi = 3.1415
코드 파이가 (파이 = 3.1415), 그래서 상관없이 당신이 구조를 인스턴스화가 변경되지 않습니다 때 정의 속성에 저장된 기본 값을 지정합니다.
당신이 일정한 저장 속성을 정의하면 다음과 같이 수정하려고하면, 그것은 불평 할 것이다 :
import Cocoa struct Number { var digits: Int let numbers = 3.1415 } var n = Number(digits: 12345) n.digits = 67 print("\(n.digits)") print("\(n.numbers)") n.numbers = 8.7
다음과 같이 위의 프로그램 실행 오류, 오류는 다음과 같습니다
error: cannot assign to property: 'numbers' is a 'let' constant n.numbers = 8.7
'숫자'를 의미하는 상수, 당신은 그것을 수정할 수 없습니다.
이 건물은 초기 값이 계산됩니다 호출 할 때 지연 메모리 속성은 처음을 의미한다.
지연 저장소의 특성을 나타 내기 위해게으른 속성 선언을 사용하기 전에.
참고 :
지연 스토리지 속성합니다 (사용 변수로 선언해야합니다var
속성 값은 인스턴스 생성자 전에 완료되지 않을 수 있기 때문에, 키워드). 건설 전에 일정한 속성의 초기 값이 있어야 완료되고, 따라서 지연 속성으로 선언 할 수 없다.
지연 저장 특성은 일반적으로 사용된다 :
객체의 생성을 지연.
속성 값은 다른 알 수없는 클래스에 의존하는 경우
import Cocoa class sample { lazy var no = number() // `var` 关键字是必须的 } class number { var name = "w3big Swift 教程" } var firstsample = sample() print(firstsample.no.name)
위의 프로그램 실행 출력은 다음과 같습니다
w3big Swift 教程
당신이 목표 - C의 경험이있는 경우, 당신은 목표 - C 클래스 인스턴스 스토리지 값을 알아야 및 참조는 두 가지 방법을 제공합니다. 속성에 대한, 또한 특성 값을 저장하는 백엔드 인스턴스 변수로서 사용될 수있다.
스위프트 프로그래밍 언어는 통일 속성을 달성하기 위해 이러한 이론을 사용합니다. 스위프트는 백 엔드 스토리지 속성에 직접 액세스 할 수 없습니다, 해당하는 인스턴스 변수 속성이 없습니다. 이 시나리오에서 다른 액세스 방법의 문제점을 방지 할뿐만 아니라, 문으로 속성의 정의를 단순화.
이름, 유형 및 메모리 관리 기능을 포함하여 - - 재산의 유형의 모든 내용은 모두 독특한 장소 (유형 정의) 정의한다.
저장 특성, 종류, 구조 및 열거 이외에 속성에 직접 저장되지 계산 속성 값을 계산하지만, 다른 특성 또는 간접적 변수의 값을 설정하는 임의의 세터의 값을 얻을 수있는 흡착제를 제공하도록 정의 될 수있다.
import Cocoa class sample { var no1 = 0.0, no2 = 0.0 var length = 300.0, breadth = 150.0 var middle: (Double, Double) { get{ return (length / 2, breadth / 2) } set(axis){ no1 = axis.0 - (length / 2) no2 = axis.1 - (breadth / 2) } } } var result = sample() print(result.middle) result.middle = (0.0, 10.0) print(result.no1) print(result.no2)
위의 프로그램 실행 출력은 다음과 같습니다
(150.0, 75.0) -150.0 -65.0
매개 변수 이름을 정의하지 않습니다 계산 된 속성 setter가 새 값을 나타내는 경우, 기본 이름 newValue에 사용할 수 있습니다.
만 계산되지 게터 속성 setter는 읽기 전용 계산 속성입니다.
읽기 전용 속성은 항상 포인트를 통해 액세스 할 수있는 (.) 연산자, 계산 된 값을 반환하지만 새 값을 설정할 수 없습니다.
import Cocoa class film { var head = "" var duration = 0.0 var metaInfo: [String:String] { return [ "head": self.head, "duration":"\(self.duration)" ] } } var movie = film() movie.head = "Swift 属性" movie.duration = 3.09 print(movie.metaInfo["head"]!) print(movie.metaInfo["duration"]!)
위의 프로그램 실행 출력은 다음과 같습니다
Swift 属性 3.09
참고 :
당신은 사용해야합니다
var
그 값이 고정되어 있지 않기 때문에, 읽기 전용 속성 계산을 포함하여 계산 된 속성을 정의하는 키워드를.let
키워드가 초기화 값 후 수정할 수 없습니다 일정한 속성을 선언하는 데에만 사용됩니다.
변화를 모니터링하고 각각의 특성은 특성 값을 관찰하기 위해 호출, 심지어 새로운 값과 동일한 시간의 전류 값도 예외는 아니다 될 때 설정 속성 값에 대응하는 특성 뷰어.
또한 속성 방법을 대체하여 (스토리지 및 컴퓨팅 등록 정보 속성 포함) 상속 된 속성에 대한 속성 옵저버를 추가 할 수 있습니다 스토리지 속성 이외의 속성 지연 메모리에 추가로 시청자에 속성을 추가 할 수 있습니다.
참고 :
직접 세터 값을 모니터링하고 변화에 대응할 수 있기 때문에, 속성의 계산에 오버로드 할 수없는 속성 옵저버를 추가 할 필요가 없습니다.
당신은 하나 이상의 속성에 대한 다음과 같은 관찰자 모두를 추가 할 수 있습니다 :
willSet
새 값 호출을 설정하기 전에 didSet
새 값이 즉시 전화를 설정 한 후 import Cocoa class Samplepgm { var counter: Int = 0{ willSet(newTotal){ print("计数器: \(newTotal)") } didSet{ if counter > oldValue { print("新增数 \(counter - oldValue)") } } } } let NewCounter = Samplepgm() NewCounter.counter = 100 NewCounter.counter = 800
위의 프로그램 실행 출력은 다음과 같습니다
计数器: 100 新增数 100 计数器: 800 新增数 700
계산 모드 속성 및 설명 관찰자는 글로벌 및 로컬 변수를 사용할 수있다.
지역 변수 | 글로벌 변수 |
---|---|
기능, 방법, 또는 내부 폐쇄에서 변수를 정의했다. | 기능, 방법 외부 변수 또는 폐쇄 정의의 모든 종류. |
저장하고 값을 검색하십시오. | 저장하고 값을 검색하십시오. |
스토리지 속성을 얻고 값을 설정합니다. | 스토리지 속성을 얻고 값을 설정합니다. |
또한, 특성을 계산하기 위해 사용. | 또한, 특성을 계산하기 위해 사용. |
유형 속성 ({}) 내측 최 중괄호 쓰는 타입 형태의 일부로 정의된다.
클래스 타입 속성을 정의하는 유형 속성 값 유형을 정의 정적 키워드 클래스 키워드를 사용한다.
struct Structname { static var storedTypeProperty = " " static var computedTypeProperty: Int { // 这里返回一个 Int 值 } } enum Enumname { static var storedTypeProperty = " " static var computedTypeProperty: Int { // 这里返回一个 Int 值 } } class Classname { class var computedTypeProperty: Int { // 这里返回一个 Int 值 } }
참고 :
type 속성의 계산 예는 읽기 전용,하지만 당신은 또한 인스턴스 속성을 계산 읽기 및 쓰기 유형 속성 구문과 유사한 계산을 정의 할 수 있습니다.
유사한 특성의 예로는, 속성에 대한 액세스의 형태는 도트 오퍼레이터에 의해 수행된다 (.). 그러나, 재산의 종류는 오히려 예로서보다, 통과 및 유형 자체를 설정하는 것입니다. 다음 예는 다음과 같다 :
import Cocoa struct StudMarks { static let markCount = 97 static var totalCount = 0 var InternalMarks: Int = 0 { didSet { if InternalMarks > StudMarks.markCount { InternalMarks = StudMarks.markCount } if InternalMarks > StudMarks.totalCount { StudMarks.totalCount = InternalMarks } } } } var stud1Mark1 = StudMarks() var stud1Mark2 = StudMarks() stud1Mark1.InternalMarks = 98 print(stud1Mark1.InternalMarks) stud1Mark2.InternalMarks = 87 print(stud1Mark2.InternalMarks)
위의 프로그램 실행 출력은 다음과 같습니다
97 87