Swift3(스위프트3)

swfit3 스위프트3 프로퍼티와 감시자

알통몬_ 2017. 7. 6. 11:23
반응형


안녕하세요 알통몬입니다.

공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^

 


이번 포스팅에서는 프로퍼티와 프로퍼티 감시자에 대해 공부합니다.


프로퍼티는 구조체나 클래스, 열거형에서 구현하는데요.

타입이랑 연관된 값을 표현할 때 사용합니다.


프로퍼티에는

저장 프로퍼티

연산 프로퍼티

인스턴스 프로퍼티

타입 프로퍼티가 있으며 열거형에는 연산 프로퍼티만 구현할 수 있고,

연산 프로퍼티는 var 키워드를 통해서만 구현할 수 있습니다.


예제)

    

 Struct Example {

   // 저장 프로퍼티

   var name : String = ""

   var age : Int = 0

   

   // 인스턴스 연산 프로퍼티

   var ageInForeignCountry : Int {

      get {

         return age - 1

      }

      set (input) {

          age = input + 1

      }

   }


   // 타입 저장 프로퍼티

   static var gender : String = "남자"


   // 읽기 전용 연산 프로퍼티 : 메소드처럼 사용 가능 ( 쓰기 전용은 X )

   var printMyGender : String {

      get {

         return "저의 성별은 \(gender) 입니다"

      }

   }

   

   // 읽기 전용 타입 연산 프로퍼티( 읽기 전용에서는 get 생략 가능 )

   static var myGender : String {

      return "저는 \(gender) 입니다"

   }

 }

   // 타입 연산 프로퍼티의 사용

   print(Example.myGender)

   // 저는 남자입니다


   var example : Example = Example()

   example.age = 26


   // 인스턴스 저장 프로퍼티의 사용

   example.name = "알통몬"

   // 인스턴스 연산 프로퍼티의 사용

   print(example.printMyGender)

   // 저의 성별의 남자입니다

   

   print("저는 \(example.age) 살입니다. 외국 나이로는 \(example.ageInForeignCountry) 살입니다")


   * 저장 프로퍼티와 연산 프로퍼티의 기능들은 함수나 클로저, 타입 등의 외부에 위치한

   지역변수나 전역변수에도 모두 사용이 가능합니다.


  예)

   var x : Int = 10

   var y : Int  = 20

   var sum : Int {

     return x + y

   }

   


프로퍼티 감시자 : 프로퍼티의 값이 변경될 때( 변경되기 직전, 변경된 직후)

 원하는 동작을 수행할 수 있습니다.

 

   willSet (value) { //구현 코드 } // 프로퍼티의 값이 변경되기 직전에 호출됩니다.

   didSet (value) { //구현 코드} // 프로퍼티의 값이 변경된 직후에 호출됩니다.


   struct Stock {

      var stockPrice : Double = 500 {

         willSet (newPrice) {

            print("주식 가격이 \(stockPrice) 에서 \(newPrice)로 변경될 예정입니다")

         }

         didSet (oldPrice) {

            print("주식 가격이 \(oldPrice) 에서 \(stockPrice)로 변경되었습니다")

         }

      }

  

      // 연산 프로퍼티

      var price : Double {

          get {

               return ~~

          }

          set {

               return ~~

          }

       // 연산프로퍼티 안에서는 감시자를 사용할 수 없습니다.

      }

   }


 * 프로퍼티 감시자도 프로퍼티처럼 함수나 클로저, 타입 등의 외부에 위치한

   지역변수나 전역변수에도 모두 사용이 가능합니다.

   예제)

   var x : Int = 100 {

       willSet (newVal) {

            print("x 값이 \(x) 에서 \(newVal)로 변경될 예정입니다")

         }

         didSet (oldVal) {

            print("x 값이 \(oldVal) 에서 \(x)로 변경되었습니다")

         }

   }

   //willSet  호출 => x 값이 100 에서 300으로 변경될 예정입니다

   x = 300      

   // didSet 호출 => x 값이 100에서 300으로 변경되었습니다.



다음 포스팅에서는 상속에 대해 공부하겠습니다~~


이상입니다.


반응형