操作符

struct Vector2D {

var x =0.0

var y =0.0

}

//重新定義+操作符

func +(left:Vector2D, right:Vector2D)->Vector2D{

return Vector2D(x: left.x+ right.x, y: left.y+ right.y)

}

func *= (left:Vector2D, right:Vector2D)->Double{

return left.x* right.x+ left.y* right.y

}

letv1 =Vector2D(x:1.0, y:2.0)

letv2 =Vector2D(x:3.0, y:4.0)

letd =v1*=v2// 11

//定義一個(gè)操作符優(yōu)先級(jí)的代碼

/*

precedencegroup定義一個(gè)操作費(fèi)優(yōu)先級(jí)別。操作符優(yōu)先級(jí)別的定義和類型聲明有些相似,一個(gè)操作符優(yōu)先級(jí)需要屬于某個(gè)特定的優(yōu)先級(jí)。Swift標(biāo)準(zhǔn)庫(kù)中已經(jīng)定義了一些常用的運(yùn)算優(yōu)先級(jí)組,比如加法優(yōu)先級(jí)AdditionPrecedence和乘法優(yōu)先級(jí)MultipcationPrecedence等。如果沒(méi)有適合你的運(yùn)算發(fā)優(yōu)先級(jí)組,你就需要向下面代碼那樣,自己制定結(jié)合律方式和優(yōu)先級(jí)順序

swift符號(hào)優(yōu)先級(jí)查詢

https://github.com/apple/swift-evolution/blob/master/proposals/0077-operator-precedence.md

*/

/*

associativity定義結(jié)合律,即如果多個(gè)同類的操作符出現(xiàn)的計(jì)算順序。比如常見(jiàn)的加法和減法都是left,就是說(shuō)多個(gè)加法同事出現(xiàn)時(shí)按照從左到右的順序計(jì)算(因?yàn)榧臃M足交換律,所以這個(gè)順序無(wú)所謂,但是減法的話計(jì)算順序就很重要了)。點(diǎn)乘的結(jié)果是一個(gè)Double,不再和其他點(diǎn)乘結(jié)合使用,所以這里使用none

*/

/*

higtherThan ,運(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 DotPrecedence {

associativity: none

higherThan: MultiplicationPrecedence

}

infixoperator +* : DotPrecedence

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容