協(xié)議為方法,屬性和其他要求的功能提供了一個藍本。它只是描述了方法或屬性的骨架,而不是實現(xiàn)。方法和屬性實現(xiàn)還可以通過定義類,函數和枚舉完成。協(xié)議的一致性是指方法或屬性滿足協(xié)議的要求。
協(xié)議也遵循類似類,結構和枚舉的語法:
protocol SomeProtocol { // protocol definition }
協(xié)議在類,結構或枚舉類型命名聲明。單個和多個協(xié)議的聲明也是可以的。如果多個協(xié)議規(guī)定,它們必須用逗號分隔。
struct SomeStructure: Protocol1, Protocol2 { // structure definition }
當一個協(xié)議在超類中定義,協(xié)議名稱應遵循命名在超類之后。
class SomeClass: SomeSuperclass, Protocol1, Protocol2 { // class definition }
協(xié)議用于指定特定類型的屬性或屬性的實例。它僅指定類型或實例屬性單獨而不是指定它是否是一個存儲或計算屬性。另外,它是用來指定的屬性是否為“可獲取'或'可設置”。
屬性要求由 “var” 關鍵字作為屬性變量聲明。 {get set} 使用它們類型聲明后聲明屬性可獲取和可設置。 可獲取是由它們的類型{get}取屬性聲明后提及。
protocol classa { var marks: Int { get set } var result: Bool { get } func attendance() -> String func markssecured() -> String } protocol classb: classa { var present: Bool { get set } var subject: String { get set } var stname: String { get set } } class classc: classb { var marks = 96 let result = true var present = false var subject = "Swift Protocols" var stname = "Protocols" func attendance() -> String { return "The \(stname) has secured 99% attendance" } func markssecured() -> String { return "\(stname) has scored \(marks)" } } let studdet = classc() studdet.stname = "Swift" studdet.marks = 98 studdet.markssecured() println(studdet.marks) println(studdet.result) println(studdet.present) println(studdet.subject) println(studdet.stname)
當我們使用 playground 運行上面的程序,得到以下結果。
98 true false Swift Protocols Swift
protocol daysofaweek { mutating func print() } enum days: daysofaweek { case sun, mon, tue, wed, thurs, fri, sat mutating func print() { switch self { case sun: self = sun println("Sunday") case mon: self = mon println("Monday") case tue: self = tue println("Tuesday") case wed: self = wed println("Wednesday") case mon: self = thurs println("Thursday") case tue: self = fri println("Friday") case sat: self = sat println("Saturday") default: println("NO Such Day") } } } var res = days.wed res.print()
當我們使用 playground 運行上面的程序,得到以下結果。
Wednesday
Swift 允許用戶初始化協(xié)議遵循類似于正常初始