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