Programming/Swift(iOS)

Swift Property - 3

홍열 2021. 4. 1. 23:42
728x90

프로퍼티에는 감시자라는게 있습니다.

 

값이 변경될 때, 특정 행동들을 수행하도록 만들 수 있습니다.

 

저장 프로퍼티에 한해서만 사용을 할 수 있고, willSet / didSet이 있습니다.

- willSet

   값이 변경되지 직전에 호출
   속성이 변경될 것이라는 것을 외부에 알릴때 많이 사용

 

-didSet

   값 변경 후에 호출 된다.

   값의 변경 이후에 추가적으로 수행해야되는 작업이 있을 경우

 

이와는 별도로 defer block도 있습니다.

함수가 끝나고 난 이후에 무조건 실행되는 block입니다... 

struct User {
    var email:String {
        didSet {
        	//만약 emil의 주소가 올바른지 체크하고 싶다..
            //예를 들어 이메일의 입력이 ".      hello@gmail.com      "이다..
            //공백 제거하는 방법을 email에 값이 변경된 후에 다시 한번 처리하는 것이다.
            //email = email.lowercased().trimmingCharacters(in:.whitespaces)
            print("didSet \(oldValue)")
        }
        willSet {
            print("willSet \(newValue)")
            isChanged = true
            
        }
    }
    var isChanged:Bool = false
    
    init(email:String) {
        print("init begin")
        self.email = email
        //defer: 함수가 종료된 이후에 호출되는 블록을 지정합니다. 함수의 마지막에 수행되어야하는 정리코드를 캠슐화하는 목적으로 사용한다.
        //swift의 공식 솔루션은 아니다. 하지만 많은 개발자들이 많이 사용하는 방법은 defer이다. 
        defer {
            print("defer")
        }
        
        print("init end")
        
    }
}