保証する


1.番組の種類

  • インスタンスストレージプロトコル
  • タイプストレージプロトコル
  • インスタンス演算プログラム
  • タイプ演算プログラム
  • 遅延ストレージプロトコル
  • 2.定義と使用

  • プログラムは、構造体、クラス、列挙型内部で実現できる.
  • ただし列挙内部では演算プログラムしか実現できない.
  • 演算プログラムはvarとしか宣言できない.
  • 演算プログラムは、読む前に実施できるが、書くだけでは使用できない.
  • 読む前に実施するにはget blockを記入するだけです.読み込み前にget blockを省略できます.
  • 読んでも書いても良いならget blockとset blockを実施できます.
  • 暗黙パラメータnewValueは、
  • setブロックで使用できます.
  • 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살입니다.

    3.応用

    struct Money {
        var currencyRate: Double = 1100
        var dollar: Double = 0
        var won: Double {
            get {
                return dollar * currencyRate
            }
            set {
                dollar = newValue / currencyRate
            }
        }
    }
    
    var moneyInMyPocket = Money()
    
    moneyInMyPocket.won = 11000
    
    print(moneyInMyPocket.won)
    // 11000
    
    moneyInMyPocket.dollar = 10
    
    print(moneyInMyPocket.won)
    // 11000

    4.ゾーン変数とグローバル変数


    プロファイルを格納し、プロファイルを計算する機能は、関数、メソッド、モジュール、タイプなどの外部の領域/グローバル変数に使用できます.
    var a: Int = 100
    var b: Int = 200
    var sum: Int {
        return a + b
    }
    
    print(sum) // 300

    5.職業監視者

  • Propertyモニタは、Property値が変化した場合に必要な操作を実行できます.
  • 値変更前willSetブロック、値変更後didSetブロックが呼び出されます.
  • 両者は必要条件を1つだけ実施しても差し支えない.
  • 変更する値が既存の値と同じであっても、Propertyモニタは実行を継続します.
  • willSetモジュールは暗黙的なパラメータが使用可能newValuedidSetモジュールは使用可能oldValue
  • Propertyモニタは、Propertyの演算には使用できません.
  • Propertyモニタは、関数、メソッド、モジュール、タイプなどの領域/グローバル変数に使用できます.
  • 6.定義と使用

    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
    すべてのソースコードはhttps://github.com/velmash/swift_basicにあります.