swift 自定義運算子

2021-10-23 16:53:02 字數 2244 閱讀 5762

除了實現標準運算子,在swift當中還可以宣告和實現自定義運算子(custom operators)

新的運算子要在全域性作用域內,使用operator 關鍵字進行宣告,同時還要指定prefix 、infix或者 postfix限定符

code

//: a uikit based playground for presenting user inte***ce

import uikit

struct vector2d

prefix operator +++

extension vector2d

static prefix func +++ (vector:inout vector2d)->vector2d

}var tobedoubled = vector2d(x:3.0,y: 1.0)

let afterdoubling = +++tobedoubled

print(afterdoubling.x)

print(afterdoubling.y)

結果

6  2

自定義運算子的優先順序和結合性

自定義中綴(infix)運算子也可以指定優先順序和結合性

每乙個自定義的中綴運算子都屬於乙個優先順序組

優先順序組置頂了一自定義中綴運算子和其他中綴運算子的關係

基本**時這樣的

precedencegroup myprecedence
那誰看誰懵逼啊 我們先回顧前面部落格的知識

正常的優先順序大家想必九年義務教育都懂一點 加減第二 乘除第一

//: a uikit based playground for presenting user inte***ce

import uikit

struct vector2d

precedencegroup myprecedence

infix operator +-:additionprecedence

infix operator *^:multiplicationprecedence

extension vector2d

static func *^ (left: vector2d,right:vector2d) ->vector2d

}let firstvector = vector2d(x: 1.0, y: 2.0)

let secondvector = vector2d(x: 3.0, y: 7.0)

let plusminusvecotr = firstvector +- secondvector

let thirdvector = vector2d(x: 2.0, y: 2.0)

let vector = firstvector +- secondvector *^ thirdvector

print(vector.x)

print(vector.y)

結果 7 -51 也就是先算乘除 後算加減

然後我們修改下下*^的優先順序為我們自定義的優先順序

//: a uikit based playground for presenting user inte***ce

import uikit

struct vector2d

precedencegroup myprecedence

infix operator +-:additionprecedence

infix operator *^:myprecedence

extension vector2d

static func *^ (left: vector2d,right:vector2d) ->vector2d

}let firstvector = vector2d(x: 1.0, y: 2.0)

let secondvector = vector2d(x: 3.0, y: 7.0)

let plusminusvecotr = firstvector +- secondvector

let thirdvector = vector2d(x: 2.0, y: 2.0)

let vector = firstvector +- secondvector *^ thirdvector

print(vector.x)

print(vector.y)

結果就是

先算+- 再算乘除

結果就是

8 29

swift 過載和自定義運算子

像這樣定義乙個結構體 struct vector2d 當 vector2d 的兩個變數相加時,我們需要這樣做 let v1 vector2d x 2.0,y 3.0 let v2 vector2d x 4.0,y 5.0 var v3 vector2d x v1.x v2.x,y v1.y v2.y...

6 1 2 自定義運算子

6.1.2 自定義運算子 定義自定義的運算子的方式類似於函式,使用 let 繫結。它們可以使用任何字元,可以是通常的 f 數 算符 或者是邏輯運算子 還可以是其他字元 宣告乙個運算子,要把它的名字括在括號中,這是與通常的 let 繫結的唯一區別。使用星號時要小心,因為,用於 f 多行注釋的開始。在這...

6 1 2 自定義運算子

6.1.2 自定義運算子 定義自定義的運算子的方式類似於函式,使用 let 繫結。它們可以使用任何字元,可以是通常的 f 數 算符 或者是邏輯運算子 還可以是其他字元 宣告乙個運算子,要把它的名字括在括號中,這是與通常的 let 繫結的唯一區別。使用星號時要小心,因為,用於 f 多行注釋的開始。在這...