Swift中的協議

2021-07-23 15:36:05 字數 2601 閱讀 9642

equatable協議用於相等的比較,遵守這個協議後必須對==運算子進行過載。

struct record: equatable 

func ==(left: record, right: record) -> bool

let recorda = record(wins: 10, losses: 5)

let recordb = record(wins: 10, losses: 5)

recorda == recordb//true

recorda != recordb//false

過載==之後,!=也可以正常使用

comparable協議用於比較,只需要過載<就可以了

struct record: equatable, comparable 

func ==(left: record, right: record) -> bool

func <(left: record, right: record) -> bool

return left.losses > right.losses

}

record遵守comparable協議,表示其是乙個可比較的物件。

var team1record = record(wins: 10, losses: 3)

var team2record = record(wins: 8, losses: 5)

var team3record = record(wins: 8, losses: 8)

var records = [team1record, team2record, team3record]

records.sort()

遵循customstringconvertible協議,只需要實現乙個計算型的屬性description

struct record: equatable, comparable, customstringconvertible 

}

這時print(team1record)輸出的結果就為:wins: 10 , losses: 3

booleantype可以讓乙個型別被視為乙個布林值,需要覆蓋乙個boolvalue屬性。

var boolvalue: bool
就可以這樣使用if語句:

if recorda
同樣可以讓基本型別實現booleantype協議,這樣就可以直接來進行布林判斷,如下:

extension int: booleantype 

}var wins = 0

if !wins

內容來自operator overloading in swift tutorial

例如,過載+運算子,使兩個int型陣列相加:

func +(left: [int], right: [int]) -> [int] 

return sum

}

自定義運算子

定義乙個自定義運算子有三步:

關鍵字:

如下,自定義運算子,使兩個int型別陣列相加:

infix operator ⊕  // 1

func ⊕(left: [int], right: [int]) -> [int]

return sum

}

泛型運算子

如下,指定型別:

infix operator ⊕ 

func ⊕(left: [t], right: [t]) -> [t]

return minus

}

但是,會報錯could not find an overload for '+' that accepts the supplied arguments.。由於不知道型別,swift不知道怎樣相加。

所以,一般的做法是,先定義乙個協議,再擴充套件原有型別:

protocol number 

extension double : number {} // 3

extension float : number {}

extension int : number {}

infix operator ⊕

func ⊕(left: [t], right: [t]) -> [t]

return minus

}

Swift協議中類繼承協議的mutating問題

之前實際開發的時候遇到的乙個小問題,網上也沒有找到相關說明。本來當時弄明白了想著記下來的,但是比較忙就耽擱了,趁今天休息記錄一下。首先,我們看一下下面這個兩數之和的協議 protocol test customstringconvertible varnum2 intfunc getsum intf...

swift 中協議的使用 protocol

協議可被類 結構體 或列舉型別採納以提供所需功能的具體實現。滿足了協議中需求的任意型別都叫做遵循了該協議。實現目標,以官方文件為背景,修改了一下,使其更簡單,建立乙個遊戲玩家和遊戲狀態跟蹤的類,將遊戲和開始和結束做為遊戲狀態。protocol gameprotocol func gamestart ...

Swift中協議的基礎知識

在swift中,協議用於統一方法和屬性,或者說協議是特定的方法和屬性的集合,但是它本身並沒有實現,它只有宣告,具體的實現是由其它遵守該協議的主體來執行的。類 結構體和列舉在宣告的時候,都可以遵守乙個或者多個協議,並實現協議所要求的屬性或者方法。協議的格式一般為 定義協議 protocol 協議名 遵...