Swift에서 get과 set은 무엇입니까?
저는 스위프트를 배우고 있고 애플에서 스위프트 프로그래밍 언어를 읽고 있습니다.Objective-C 배경이 없습니다(PHP, 자바스크립트 등만 있고 Objective-C는 없습니다).
24-25페이지에서 나는 다음 코드를 봅니다.
//...Class definition stuff...
var perimeter: Double {
get {
return 3.0 * sideLength
}
set {
sideLength = newValue / 3.0
}
}
//...Class continues...
이 부분은 책에 명시되어 있지도 않고, 무엇을 위한 것인지 알 수가 없습니다.
무엇을 얻고 무엇을 준비합니까?
클래스 내 변수 가져오기 및 설정은 해당 내용을 검색("geting")하거나 변경("setting")하는 것을 말합니다.
를 고려합니다.members
family
이 의 두 될 수 때문입니다 당연히 이 변수는 정수여야 합니다. 가족은 결코 두 점의 사람으로 구성될 수 없기 때문입니다.
그래서 당신은 아마도 당신이 다음과 같이 정의함으로써 진행할 것입니다.members
다음과 같은 변수:
class family {
var members: Int
}
그러나 이것은 이 클래스를 사용하는 사람들에게 가족 구성원의 수를 0 또는 1 정도로 설정할 수 있는 가능성을 줄 것입니다.그리고 1인 가족이나 0인 가족이 존재하지 않기 때문에, 이것은 매우 유감스러운 일입니다.
여기가 바로 게터와 세터가 들어오는 곳입니다.이렇게 하면 변수가 어떻게 변경될 수 있는지, 어떤 값을 받을 수 있는지 직접 결정할 수 있고, 어떤 내용을 반환할지도 결정할 수 있습니다.
도 를 수 .members
2값 값:
class family {
var _members: Int = 2
var members: Int {
get {
return _members
}
set (newVal) {
if newVal >= 2 {
_members = newVal
} else {
println('error: cannot have family with less than 2 members')
}
}
}
}
이제 우리는 접속할 수 있습니다.members
g를 입력합니다.instanceOfFamily.members
에 setter 를 도 있습니다instanceOfFamily.members = 3
이를 더 할 수 그러나 바뀐 것은 이 변수를 더 이상 2보다 작은 것으로 설정할 수 없다는 사실입니다.
합니다의 합니다._members
입니다를 members
세터 함수 originalmembers
이제 계산된 속성이 되었습니다. 즉, 실제 변수를 처리하기 위한 인터페이스 역할만 한다는 것을 의미합니다.
간단한 질문 뒤에 짧고 간단하고 명확한 대답이 뒤따라야 합니다.
은 됩니다를 합니다.
get{}
부됩니다.
set{}
부
PS. 속성에 값을 설정할 때 Swift는 자동으로 "newValue"라는 이름의 상수 = 설정하고 있는 값을 생성합니다.를 한 "newValue"에서 수 있게 set{}
일부.
예:
var A:Int = 0
var B:Int = 0
var C:Int {
get {return 1}
set {print("Recived new value", newValue, " and stored into 'B' ")
B = newValue
}
}
// When we are getting a value of C it fires get{} part of C property
A = C
A // Now A = 1
// When we are setting a value to C it fires set{} part of C property
C = 2
B // Now B = 2
계산된 속성을 살펴봐야 합니다.
당신의 코드 샘플에서,perimeter
는 클래스 변수에 의해 백업되지 않는 속성입니다.대신 그 값은 다음을 사용하여 계산됩니다.get
방법을 통해 저장됩니다.set
method - 보통 getter and setter라고 합니다.
해당 속성을 다음과 같이 사용할 경우:
var cp = myClass.perimeter
당신은 그 안에 포함된 코드를 호출하고 있습니다.get
코드 블록, 그리고 당신이 이것을 이렇게 사용할 때:
myClass.perimeter = 5.0
에 포함된 코드를 호출하는 중입니다.set
코드 블록, 위치newValue
는 할당 연산자의 오른쪽에 제공된 값으로 자동으로 채워집니다.
게터와 설정기가 모두 지정된 경우 계산된 속성을 읽기/쓰기할 수 있으며, 게터만 지정된 경우 읽기 전용으로 사용할 수 있습니다.
변수는 클래스에서 다음과 같이 선언됩니다.
class X {
var x: Int = 3
}
var y = X()
print("value of x is: ", y.x)
//value of x is: 3
이제 프로그램에서 x의 기본값을 3 이상으로 만들 수 있습니다.이제 x가 3보다 작으면 프로그램이 실패합니다.
그래서 사람들이 3개를 넣거나 3개 이상을 넣었으면 합니다.Swift는 이 값을 쉽게 이해할 수 있게 해주었고 이 값을 이해하는 것이 중요합니다. 이 값은 iOS 개발에 광범위하게 사용될 것이기 때문에 변수 값의 연대를 측정하는 진보된 방법입니다.이제 여기서 get and set이 어떻게 사용되는지 살펴보겠습니다.
class X {
var _x: Int = 3
var x: Int {
get {
return _x
}
set(newVal) { // Set always take one argument
if newVal >= 3 {
_x = newVal // Updating _x with the input value by the user
print("new value is: ", _x)
}
else {
print("error must be greater than 3")
}
}
}
}
let y = X()
y.x = 1
print(y.x) // The error must be greater than 3
y.x = 8 // // The new value is: 8
여전히 의문이 있는 경우 get and set을 사용하면 원하는 방식으로 변수를 업데이트할 수 있습니다.get and set을 사용하면 논리를 더 잘 제어할 수 있습니다.그것은 강력한 도구이므로 쉽게 이해할 수 없습니다.
언급URL : https://stackoverflow.com/questions/24699327/what-are-get-and-set-in-swift
'programing' 카테고리의 다른 글
'valid xml'과 'well formed xml'의 차이가 있습니까? (0) | 2023.10.01 |
---|---|
각도 비동기 파이프 및 객체 속성 (0) | 2023.10.01 |
단위 테스트와 자동 테스트의 차이점은 무엇입니까? (0) | 2023.10.01 |
underscore.js를 사용하여 asc 및 descort를 수행하려면 어떻게 해야 합니까? (0) | 2023.10.01 |
PHP 엔티티 클래스 생성기 (0) | 2023.10.01 |