swift 操作符

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容