swift 運算子過載

2021-10-23 16:48:56 字數 2331 閱讀 3434

類和結構體可以位現有的運算子提供自定義的實現。成為運算子過載

code 

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

import uikit

struct vector2d

extension vector2d

}let vector = vector2d(x:3.0,y: 1.0)

let anothervector = vector2d(x:2.0,y:4.0)

let combindvector = vector + anothervector

print(combindvector.x)

print(combindvector.y)

結果都是5

一元運算子過載

類與結構體也能提供標準一元運算子的實現

要實現字首或字尾運算子,需要在宣告運算子函式的時候在func關鍵字之前指定prefix或postfix限定符

code

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

import uikit

struct vector2d

extension vector2d

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

}let vector = vector2d(x:3.0,y: 1.0)

let anothervector = vector2d(x:2.0,y:4.0)

let combindvector = vector + anothervector

let negatice = -vector

print(negatice.x)

print(negatice.y)

結果 -3  -1

組合賦值運算子過載

組合複製運算子將賦值運算子(=)與其他運算子進行結合

在實現的時候,需要把運算子的左引數設定成inout型別,因為這個引數的值會在運算子函式內直接被修改

code

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

import uikit

struct vector2d

extension vector2d

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

let anothervector = vector2d(x:2.0,y:4.0)

vector += anothervector

print(vector.x)

print(vector.y)

結果都是5.0

等價運算子過載

自定義類和結構體不接受等價運算子的預設實現。也就是所謂的『等於』運算子(==)

要使用等價運算子來檢查好你自己型別的等價,需要和其他中綴運算子一樣提哦那個乙個『等於』運算子過載,並且遵循標準庫的equatable協議

code

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

import uikit

struct vector2d

extension vector2d }

var vector = vector2d(x:3.0,y: 1.0)

let anothervector = vector2d(x:2.0,y:4.0)

print(vector==anothervector)

結果false

swift' 為一下自定義型別提供等價運算子合成實現

只擁有遵循equatable 協議儲存的結構體

只擁有equatable協議關聯型別的列舉

沒有關聯型別的列舉

code

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

import uikit

struct vector3d:equatable

let twothreefor = vector3d(x:2.0,y: 3.0,z:4.0)

let anthertwothreefour = vector3d(x: 2.0, y: 3.0, z: 4.0)

print(twothreefor == anthertwothreefour)

結果

true

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...

Swift 運算子過載專題

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...

Swift 運算子過載簡介

在任何一門計算機程式語言中,運算子過載都是非常強大的特性之一,因此蘋果決定為 swift 也提供這一機制。然而,能力越強責任越大 利用運算子過載你很容易實現一些奇怪的場景,例如用減法運算子實現兩數相加,或者用乘法運算子實現兩數相除,但這顯然都不是你希望出現的。好了,閒話少敘 讓我們看看運算子過載究竟...