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)庫中已經(jīng)定義了一些常用的運(yùn)算優(yōu)先級(jí)組正歼,比如加法 優(yōu)先級(jí) ( AdditionPrecedence ) 和乘法優(yōu)先級(jí) ( MultiplicationPrecedence ) 等辐马,你可以在這里找 到完整的列表。如果沒有適合你的運(yùn)算符的優(yōu)先級(jí)組局义,你就需要像我們?cè)诶又凶龅眠@ 樣喜爷,自己指定結(jié)合律方式和優(yōu)先級(jí)順序了。
associativity
定義了結(jié)合律萄唇,即如果多個(gè)同類的操作符順序出現(xiàn)的計(jì)算順序檩帐。比如常?的加法和減法都 是 left ,就是說多個(gè)加法同時(shí)出現(xiàn)時(shí)按照從左往右的順序計(jì)算 (因?yàn)榧臃M足交換律另萤,所 以這個(gè)順序無所謂湃密,但是減法的話計(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 來指定優(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沒有關(guān)聯(lián)性,并且優(yōu)先級(jí)比TernaryPrecedence高
MultiplicationPrecedence是*,/的一級(jí)碘梢,的優(yōu)先組 叫乘除優(yōu)先組
Ternary Precedence 是 ?: 的一級(jí)咬摇,是比等號(hào)高的最低優(yōu)先組 叫三元優(yōu)先組
詳情查看 操作符 Declarations