Protocol(基本语法和使用场景)
生活随笔
收集整理的這篇文章主要介紹了
Protocol(基本语法和使用场景)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
import UIKitclass ViewController: UIViewController {//協議的幾種定義格式:1.普通格式:protocol 協議名稱{協議體} 2.繼承格式:protocol 協議名稱:協議1,協議2...{協議體} 3.類特定協議格式1//@objc protocol 協議名稱{協議體} 4.類特定協議格式2 protocol 協議名稱: class {協議體}//在swift中,協議可以簡單形象比喻為一個藍圖,規定了你的類,枚舉或者結構體所需要遵循的需求。具體對于協議的實現可以在類,枚舉或者結構體內來完成。//1.協議命名時首字母應大寫//2.協議中定義屬性時,必須使用var//3.實現協議時,不能改變屬性的名字和類型//4.協議中可以定義實例屬性//5.屬性后面跟隨{get}表示實現此協議的地方既可以把屬性定義為變量var也可以定義為常量let//6.屬性后面的{get set}表示實現此協議的地方只能把該屬性定義為變量var,而不能是常量let//7.協議中即可以定義實例方法//8.協議可以繼承且可以多繼承//9.標準格式的協議可以被類,結構體和枚舉三種類型來實現,但是類特定協議格式1和類特定協議格式2的協議只能被類類型實現。override func viewDidLoad() {super.viewDidLoad()}
}//--------------類特定協議格式@objc protocol 協議名稱{協議體}
@objc protocol Villa {//土豪朋友必須知道有多少層 --- 實例屬性 {get}表示這個在具體實現體中可以是let常量或者var變量的形式var floors: Int {get}//土豪朋友必須知道要什么風格var style:String {get}//別墅必須有門可以打開func openGate() -> String//別墅必須要有空調func openAirCondition() -> Bool//別墅如果有個狗窩更好 optional是可選的,不一定必須要實現@objc optional func hasDogHouse() ->Bool
}
//土豪朋友以前也是碼農,雖然蓋了別墅,但必須有一個工作室寫程序------------類特定協議格式2 protocol 協議名稱: class {協議體}
protocol Workshop:class {//必須要有上好的桌子var desk: String {get set}//必須要有一本swift編程的書var book:String{get}//可以編程序func program(code: String) -> Bool//可以調試func debug()
}
//碼農離不開兩樣東西,電腦和游戲,必須有個游戲屋-----------------普通格式協議
protocol GameRoom {var games:String {get}
}//最終土豪朋友拿著這份組合協議的要求去招標-------多重協議繼承
protocol CombineRequirement: Villa, Workshop {static var name: String {get}static func finish()->Bool
}//韓國鳥叔建筑有限公司給出的名為"青城山別墅"的方案,實現了別墅建設要求的組合協議
class Qcsbs: CombineRequirement {static var name = "lisa"//villa 協議的實現var floors: Int {return 4}var style: String {return "全歐式建筑"}func openGate() -> String {return "全自動門,自由打開!"}func openAirCondition() -> Bool {return true}//Workshop協議的實現var desk: String {get {return "碼農專用辦公桌"}set {debugPrint("新的值為:\(newValue)")}}var book: String {return "老碼說編程之玩轉swift江湖"}func program(code: String) -> Bool {debugPrint("土豪哥寫的swift程序:\(code)")return true}func debug() {debugPrint("調試通過!")}static func finish() -> Bool {return true}//成都老碼農團隊也參與競標,不過勢單力薄,只能給出游戲室的方案---------類特定協議只能在class類中被實現,不能在結構體或者枚舉里面實現。 比如這里如果寫成繼承自Workshop就會報錯Non-class type 'Qcsbs.OldCodeGameRoom' cannot conform to class protocol 'Workshop'struct OldCodeGameRoom: GameRoom {var games = "最終幻想,穿越火線"}
}
?
總結
以上是生活随笔為你收集整理的Protocol(基本语法和使用场景)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux中 . .bash_profi
- 下一篇: 尖角科技:个人隐私安全检测系统上线了!