SWIFT Property(2020.10.30)

16896 ワード


  • プログラムは、構造体、クラス、および列挙型の内部で実現することができる.

  • ただし,列挙型内部では演算プログラムしか実現できない.

  • 演算プログラムはvarとしてのみ宣言できます.

    定義#テイギ#


  •  struct Student{
     	var name: String = ""
        var `class`: String = "Swift"
        var koreanAe: Int = 0
        
        var westernAge: Int{
        	get{
            	return koreanAge -1
            }
            
            set(inputValue){
            	koreanAge = inputValue +1
            }
        }
     }
     
     // 타입 저장 프로퍼티
     static var typeDescription: String = "학생"
     /*
     //인스턴스 메서드
     func selfIntroduce(){
     	print("저는\(self.class)반 \(name)입니다.")
     }
     
     */
     
     // 읽기전용 인스턴스 연산 프로퍼티
     // get 만 있으면 읽기 전용!!  쓰기 전용은 안됨!!
     // 읽기전용!! 읽기/쓰기 전용 프로퍼티 이렇게 두종류가 있다.
     
     var selfIntroduction: String {
     	get {
        	return "저는 \(self.class)\(name)입니다"
        }
     }
     
     /*
      // 타입 메서드
      static func selfIntruduce(){
      	print("학생타입입니다.")
      }
     */
     
     // 읽기전용 타입 연산 프로퍼티
     // 읽기전용에서는 get을 생략할 수 있습니다.
     static var selfIntroduction: String {
    	return "학생타입입니다." 
    }
     

    使用

    // 타입 연산 프로퍼티 사용
    print (Student.selfIntroduction)
    //학생타입입니다.
    
    //인스턴스 생성
    var yagom: Student = Student()
    yagom.koreanAge = 10
    
    // 인스턴스 저장 프로퍼티 사용
    yagom.name = "yagom"
    print(yagom.name)
    // yagom
    
    // 인스턴스 연산 프로퍼티 사용
    print(yagom.selfIntroduction)
    // 저는 Swift반 yagom입니다.
    
    print("제 한국나이는\()살이고, 미쿡나이는 \()살 입니다."
    //제 한국나이틑 10살이고, 미쿡나이는 9살입니다.

    適用

    struct Money{
    	var currencyRate: Double = 1100
       var dollar:Double = 0
       var won: Double {
       	get{
           	return dollar * currencyRate
           }
           set{
           	dollar = newValue / currencyRate
               // argument를 명시하지 않고 파라미터를 전달하면 newValue 키워드로 사용할수 있다.
           }
       }
    }
    
    var moneyInMyPocket = Money()
    moneyInMyPocket.won = 11000
    print(moneyinMyPocket.won)
    // 11000
    moneyInMyPocket.dollar = 10
    
    print(moneyInMyPocket.won)
    //11000
     

    ゾーン変数

  • は、構成および演算構成を格納する機能を、関数、方法、モジュール、およびタイプなどの外部領域/グローバル変数に使用することができる.
  •  var a: Int = 100
     var b: Int = 200
     var sum: Int{
     	return a + b
     }
     
     print(sum) // 300
     

    モニター

  • Propertyモニタでは、Property値を変更するときに必要な操作を実行できます.

    定義#テイギ#

  • struct Money{
    	// 프로퍼티 감사지 사용
        var currencyRate : Double = 1100{
        	willSet(newRate){
            	print("환율이 \(currencyRate)에서 \(newRate)으로 변경될 예정입니다.")
            }
            didSet(oldRate){
            	print("환율이 \(oldRate)에서 \(currencyRate)으로 변경되었습니다.")
            }
        }    
        // 프로퍼티 감시자 사용
        var dollar: Double = 0 {
            // willSet의 암시적 매개변수 이름 newValue
        	willSet{
            	print("\(dollar)달러에서 \(newValue)달러로 변경될 예정입니다.")
            }
            // didSet의 암시적 매개변수 oldValue
            didSet{
            	print("\(dollar)달러에서 \(newValue)달러로 변경되었습니다.")
            }
        }
    
    }
    
    // 연산 프로퍼티
    var won: Double{
    	get {
        	return dollar * currencyRate
        }
        set{
        	dollar = newValue / currencyRate
        }
        
        /*
        프로퍼티 감시자와 연산 프로퍼티 기능을 동시에 사용할 수 없습니다.
        저장되는 값이 변경될때 호출이 된다. 그래서 사용할수 없다.
        willSet{
        }
        didSet{
        }
        */
    }

    使用

    var moneyInMyPocket: Money = Money()
    //환율이 1100.0에서 1150.0으로 변경될 예정입니다.
    moneyInMyPocket.currencyRate = 1150
    //환율이 1100.0에서 1150.0으로 변경되었습니다
    
    // 0.0달러에서 10.0달러로 변경될 예정입니다.
    moneyInMyPocket = 10
    // 0.0달러애서 10.0달러로 변경 되었습니다.
    
    print(moneyInMyPocket.won)
    //11500.0
    
    //프로퍼티 감시자의 기능은
    //함수, 메서드, 클로저, 타입 등의 외부에 위치한
    // 지역/전역 변수에도 모두 사용 가능합니다.
    
    var a: Int = 100 {
    	willSet {
        	print("\(a)에서 \(newValue)로 변경될 예정입니다.")
        }
        didSet {
        	print("\(a)에서 \(newValue)로 변경되었습니다.")
        }
    }
    //100에서 200으로 변경될 예정입니다.
    a=200
    // 100에서 200으로 변경되었습니다.
    ソース:youtube“yagom”