programing

Swift에서 get과 set은 무엇입니까?

stoneblock 2023. 10. 1. 19:15

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")하는 것을 말합니다.

를 고려합니다.membersfamily이 의 두 될 수 때문입니다 당연히 이 변수는 정수여야 합니다. 가족은 결코 두 점의 사람으로 구성될 수 없기 때문입니다.

그래서 당신은 아마도 당신이 다음과 같이 정의함으로써 진행할 것입니다.members다음과 같은 변수:

class family {
    var members: Int
}

그러나 이것은 이 클래스를 사용하는 사람들에게 가족 구성원의 수를 0 또는 1 정도로 설정할 수 있는 가능성을 줄 것입니다.그리고 1인 가족이나 0인 가족이 존재하지 않기 때문에, 이것은 매우 유감스러운 일입니다.

여기가 바로 게터와 세터가 들어오는 곳입니다.이렇게 하면 변수가 어떻게 변경될 수 있는지, 어떤 값을 받을 수 있는지 직접 결정할 수 있고, 어떤 내용을 반환할지도 결정할 수 있습니다.

도 를 수 .members2값 값:

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')
      }
    }
  }
}

이제 우리는 접속할 수 있습니다.membersg를 입력합니다.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방법을 통해 저장됩니다.setmethod - 보통 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