首頁>技術>

協議規定了用來實現某一特定功能所必需的方法和屬性。

任意能夠滿足協議要求的型別被稱為遵循(conform)這個協議。

類、結構體或列舉型別都可以遵循協議,並提供具體實現來完成協議定義的方法和功能。

語法

協議的語法格式如下:

protocol SomeProtocol { 		// 協議內容}

要使類遵循某個協議,需要在型別名稱後加上協議名稱,中間以冒號:分隔,作為型別定義的一部分。遵循多個協議時,各協議之間用逗號分隔。

struct SomeStructure: FirstPortocol, AnotherProtocol {    // 結構體內容}

如果類在遵循協議的同時擁有父類,應該將父類名放在協議名之前,以逗號分隔。

class SomeClass: SomeSuperClass, FirstProtocol, AnotherProtocol {    //    類的內容}
對屬性的規定

協議用於指定特定的例項屬性或類屬性,而不用指定是儲存型屬性或計算型屬性。此外還必須指明是隻讀的還是可讀可寫的。

協議中的通常用var來宣告變數屬性,在型別聲明後加上{set get}來表示屬性是可讀可寫的,只讀屬性則用{get}來表示。

protocol someClass {//    可讀可寫屬性    var marks: Int {set get}//    只讀屬性    var result: Bool {get}        func attendance() -> String    func markssecured() -> String}protocol anotherClass: someClass {    var present: Bool {get set}    var subject: String {get set}    var stname: String {get set}}class classStudent: anotherClass {    var marks: Int = 96    var result: Bool = true    var present: Bool = false    var subject: String = "Swift 協議"    var name: String = "Protocols"    func attendance() -> String {        return "The \(name) has secured 99% attendance"    }        func markssecured() -> String {        return "\(name) has scored \(marks)"    }}let student = classStudent()student.name = "Swift"student.marks = 98student.markssecured()print(student.marks, student.result, student.present, student.subject, student.name)
對Mutating方法的規定

有時需要在方法中改變它的例項。

例如:值型別(結構體,列舉)的例項方法中,將mutating關鍵字作為函式的字首,寫在func之前,表示可以在該方法中修改它所屬的例項及其例項屬性的值。

protocol week {    mutating func show()}enum days: week {    case sun, mon, tue, wed, thurs, fri, sat    mutating func show() {        switch self {        case .sun:            self = .sun            print("週日")        case .mon:            self = .mon            print("週一")        case .tue:            self = .tue            print("週二")        case .wed:            self = .wed            print("週三")        case .thurs:            self = .thurs            print("週四")        case .fri:            self = .fri            print("週五")        case .sat:            self = .sat            print("週六")        default:            print("查無此日")        }    }}var res = days.wedres.show()

13
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Qt for Python學習筆記—簡介