Swift 運算子過載專題

2021-09-01 05:29:57 字數 1864 閱讀 4934

import foundation

struct vector3

var va = vector3(x: 1, y: 2, z: 3)

var vb = vector3(x: 4, y: 5, z: 6)

func + (left: vector3, right: vector3) -> vector3

va + vb

func * (left: vector3, right: vector3) -> double

va * vb

func * (left: vector3, num: double) -> vector3

va * (-0.1)

func * (num: double, right: vector3) -> vector3

5.78 * vb

// 注意 += 不需要有返回值

func += (left: inout vector3, right: vector3)

va += vb

// 單目運算子 -

// prefix表示的是 - 在左邊,對應的關鍵字是postfix

prefix func - (vector: vector3) ->vector3

-va// 比較運算子

func == (left: vector3, right: vector3) -> bool

va == vb

func != (left: vector3, right: vector3) -> bool

va != vb

func < (left: vector3, right: vector3) -> bool

va < vb

func > (left: vector3, right: vector3) -> bool

va > vb

// 拿sort函式舉個例子

let v1 = vector3(x: 3, y: 4, z: 5)

let v2 = vector3(x: 5, y: 12, z: 13)

let v3 = vector3(x: -1, y: -2, z: -3)

var arr = [v1, v2, v3]

arr.sort(by: )

arr

// 自定義運算子

// 單目

// 首先要先宣告一下自己定義的+++

va = vector3(x: 1, y: 2, z: 3)

prefix operator +++

prefix func +++ (vector: inout vector3) -> vector3

+++va // 2, 3 ,4

va // 2, 3, 4

postfix operator +++

postfix func +++ (vector: inout vector3) -> vector3

va+++ // 2, 3, 4

va // 3, 4, 5

// 雙目

// 求兩個向量之間的夾角

// infix表示這個自定義的運算子是雙目運算子

infix operator ^

func ^ (left: vector3, right: vector3) -> double

va ^ vb

precedencegroup mypow 

infix operator **: mypow

func ** (left: int, right: int) -> int

2 ** 2 ** 3 // 256,因為是右結合

運算子過載專題

1.不能過載的運算子 類屬關係運算子 成員指標運算子 作用域分辨符 sizeof運算子 三目運算子 2.基本規則 1.一元操作符可以是不帶引數的成員函式或帶乙個引數的非成員函式。2.二元操作符可以是帶乙個引數的成員函式或帶兩個引數的非成員函式。3.operator operator operator...

swift 運算子過載

類和結構體可以位現有的運算子提供自定義的實現。成為運算子過載 code a uikit based playground for presenting user inte ce import uikit struct vector2d extension vector2d let vector ve...

swift 過載運算子

1 自定義乙個 運算子,左邊是string型別,右側為int型別 func left string,right int string let b 10 10 println b 0 3 自定義乙個單項事運算子 postfix func left double string println 0.0 4...