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 協議名 遵...