<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Swift 協議 Protocol ``` protocol Pet{ // 對于屬性,不能有初始值 var name: String{ get set }// = "My Pet" // 統一使用var關鍵字 var birthPlace: String{ get } // 對于屬性,get,set隱藏了實現細節,可以使用let實現只讀,也可以使用只有get的計算型屬性 // 對于方法,不能有實現 func playWith() // 對于方法,不能有默認參數(默認參數就是一種實現) //func fed(food: String = "leftover") func fed() func fed(food: String) // 可以使用mutating關鍵字,強調這個方法應該修改其內容 mutating func changeName(newName:String) // 不可以設置訪問控制 // 協議就是協議,如果開發者可以看見協議,就可以看見協議里的任何內容 } // 不能實例化Pet //var pet = Pet() // 協議的繼承 protocol PetBird: Pet{ var flySpeed: Double{ get } var flyHeight: Double{ get } } // 協議的實現,實現協議規定的所有屬性和方法即可 struct Dog: Pet{ // 可以使用計算型屬性 // private var myDoggyName = "Puppy" // var name: String{ // get{ // return myDoggyName // } // set{ // myDoggyName = newValue // } // } var name: String // protocol的read-only,對一個具體類的實現,不一定只讀,但是作為Pet是只讀的! //let birthPlace: String var birthPlace: String func playWith() { print("Wong!") } func fed(){ print("I want a bone.") } // 在具體實現上可以加默認參數 func fed(food: String = "Bone"){ if food == "Bone"{ print("Happy") } else{ print("I want a bone") } } // 對于class,不需要mutating關鍵字 mutating func changeName(newName: String) { name = newName } } let myDog:Dog = Dog(name: "summer", birthPlace: "beijing") // 從 Pet 的角度看,myDog 的 birthPlace 是只讀的! let aPet: Pet = myDog //aPet.birthPlace = "shanghai" ``` ``` protocol Pet{ var name: String{ get set } init(name: String) func playWith() func fed() } class Animal{ var type: String = "mammal" } // 如果一個類有繼承的類,則父類必須放在前面 class Dog: Animal, Pet{ // 如果protocol沒有init(name)的要求,name有默認名字就夠了 var name: String = "Puppy" // 如果 protocol 有 init ,則在 class 中必須注明 required required init(name: String){ self.name = name } func playWith() { print("Wong") } func fed(){ print("I love bones") } } final class Cat: Animal, Pet{ var name: String = "Kitten" // 如果是final class, init 可以沒有 required , 因為也不會再被繼承了 init(name: String){ self.name = name } func playWith() { print("Meow") } func fed(){ print("I love fish") } } class Bird: Animal{ var name: String = "Little Little Bird" init(name: String){ self.name = name } } // 如果只是繼承 Bird ,Bird 的 init 為 required ,則 override 可以省略 // 否則,必須有 override , 可以沒有 required // 因為有 Pet ,則 required 也不能省 class Parrot: Bird, Pet{ required override init(name: String){ super.init( name: name + " " + name ) } func playWith() { print("Hello") } func fed(){ print("Thank you!") } } ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看