1.全局重載加號(hào)操作符(只能是方法,不可以是類方法,或是對(duì)象方法)
第一個(gè)參數(shù)是操作符前的,第二個(gè)參數(shù)是操作符后的
func +(left: Vector2D, right: Vector2D) -> Vector2D {
return Vector2D(x: left.x + right.x, y: left.y + right.y)
}
let v4 = v1 + v2
這里的Vector2D 可以是對(duì)象,也可以是結(jié)構(gòu)體
2.定義新的操作符
示例1
/*
precedencegroup
定義了一個(gè)操作符優(yōu)先級(jí)別。操作符優(yōu)先級(jí)的定義和類型聲明有些相似,一個(gè)操作符比需 要屬于某個(gè)特定的優(yōu)先級(jí)。Swift 標(biāo)準(zhǔn)庫(kù)中已經(jīng)定義了一些常用的運(yùn)算優(yōu)先級(jí)組,比如加法 優(yōu)先級(jí) ( AdditionPrecedence ) 和乘法優(yōu)先級(jí) ( MultiplicationPrecedence ) 等,你可以在這里找 到完整的列表。如果沒(méi)有適合你的運(yùn)算符的優(yōu)先級(jí)組,你就需要像我們?cè)诶又凶龅眠@ 樣,自己指定結(jié)合律方式和優(yōu)先級(jí)順序了。
associativity
定義了結(jié)合律,即如果多個(gè)同類的操作符順序出現(xiàn)的計(jì)算順序。比如常?的加法和減法都 是 left ,就是說(shuō)多個(gè)加法同時(shí)出現(xiàn)時(shí)按照從左往右的順序計(jì)算 (因?yàn)榧臃M足交換律,所 以這個(gè)順序無(wú)所謂,但是減法的話計(jì)算順序就很重要了)。點(diǎn)乘的結(jié)果是一個(gè) Double ,不 再會(huì)和其他點(diǎn)乘結(jié)合使用,所以這里是 none ;
higherThan
運(yùn)算的優(yōu)先級(jí),點(diǎn)積運(yùn)算是優(yōu)先于乘法運(yùn)算的。除了 higherThan ,也支持使用 lowerThan 來(lái)指定優(yōu)先級(jí)低于某個(gè)其他組。
infix
表示要定義的是一個(gè)中位操作符,即前后都是輸入;其他的修飾子還包括 prefix 和 postfix ,不再贅述;
*/
precedencegroup DotProductPrecedence {
associativity: none
higherThan: MultiplicationPrecedence
}
infix operator +* : DotProductPrecedence
func +* (left: Vector2D, right: Vector2D) -> Double {
return left.x * right.x + left.y * right.y
}
let result = v1 +* v2
示例2
precedencegroup MatchPrecedence {
associativity: none
higherThan: DefaultPrecedence
}
infix operator =~: MatchPrecedence
func =~(lhs: String, rhs: String) -> Bool {
do {
let regex = try NSRegularExpression(pattern: rhs,options: .caseInsensitive)
return regex.matches(in: lhs,options: [],range: NSMakeRange(0, lhs.utf16.count)).count > 0
}catch _ {
return false
}
}
if "xxxxx@qq.com" =~ "^([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,6})$" {
print("有效的郵箱地址")
}
DotProductPrecedence,MatchPrecedence 被聲明的自定義優(yōu)先級(jí)
DefaultPrecedence沒(méi)有關(guān)聯(lián)性,并且優(yōu)先級(jí)比TernaryPrecedence高
MultiplicationPrecedence是*,/的一級(jí),的優(yōu)先組 叫乘除優(yōu)先組
Ternary Precedence 是 ?: 的一級(jí),是比等號(hào)高的最低優(yōu)先組 叫三元優(yōu)先組
詳情查看 操作符 Declarations