[SWIFT]番組


ガイドルート-iOSプログラミングのSwiftベース


パフって何?

  • プロトコルは、構造体、クラス、および列挙の内部で実施することができる.
  • は、列挙内部でのみ演算プログラムを実行できます.
  • 演算プロセスはvarとしてのみ宣言できます.
  • 演算プログラムの読み書き操作には使用できますが、書き込み操作には使用できません.
  • の読み取りを実現するには、get blockを作成するだけです.読み込み前にget blockを省略できます.
  • の読み書きを使用可能にするには、get blockとsetblockを同時に実装します.
  • 設定ブロックで暗黙パラメータnewValueを使用できます.
  • struct Student {
        
        // 인스턴스 저장 프로퍼티
        var name: String = ""
        var `class`: String = "Swift"
        var koreanAge: Int = 0
        
        // 인스턴스 연산 프로퍼티
        var westernAge: Int {
            get {
                return koreanAge - 1
            }
            
            set(inputValue) {
                koreanAge = inputValue + 1
            }
        }
        
        // 타입 저장 프로퍼티
        static var typeDescription: String = "학생"
        
        /*
        // 인스턴스 메서드
        func selfIntroduce() {
            print("저는 \(self.class)반 \(name)입니다")
        }
         */
        
        // 읽기전용 인스턴스 연산 프로퍼티
        // 간단히 위의 selfIntroduce() 메서드를 대체할 수 있습니다
        var selfIntroduction: String {
            get {
                return "저는 \(self.class)\(name)입니다"
            }
        }
            
        /*
         // 타입 메서드
         static func selfIntroduce() {
         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("제 한국나이는 \(yagom.koreanAge)살이고, 미쿡나이는 \(yagom.westernAge)살입니다.")
    // 제 한국나이는 10살이고, 미쿡나이는 9살입니다.

    モニター

  • Propertyモニタを使用すると、Property値が変化したときに必要な操作を実行できます.
  • の値が変更される前にwillset blockを呼び出し、値が変更された後にdidset blockを呼び出します.
  • では、1つだけ実装できます.
  • 変更する値は既存の値と同じですが、Propertyモニタは引き続き実行されます.
  • willset blockでは暗黙パラメータnewValueを使用し、didSet blockではoldValueを使用します.
  • Propertyモニタは、計算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("\(oldValue)달러에서 \(dollar)달러로 변경되었습니다")
            }
        }
    
        // 연산 프로퍼티
        var won: Double {
            get {
                return dollar * currencyRate
            }
            set {
                dollar = newValue / currencyRate
            }
            
            /* 프로퍼티 감시자와 연산 프로퍼티 기능을 동시에 사용할 수 없습니다
            willSet {
                
            }
             */
        }    
    }
    
    var moneyInMyPocket: Money = Money()
    
    // 환율이 1100.0에서 1150.0으로 변경될 예정입니다
    moneyInMyPocket.currencyRate = 1150
    // 환율이 1100.0에서 1150.0으로 변경되었습니다
    
    // 0.0달러에서 10.0달러로 변경될 예정입니다
    moneyInMyPocket.dollar = 10
    // 0.0달러에서 10.0달러로 변경되었습니다
    
    print(moneyInMyPocket.won)
    // 11500.0