Swift - 運算子過載


Swift 中的運算子過載

運算子過載是 Swift 程式設計中的一項強大技術。運算子過載允許我們使用自定義程式碼更改現有運算子(如 +、-、/、*、% 等)的工作方式。

它使程式碼更具表現力和可讀性。要過載運算子,我們必須使用“static func”關鍵字定義該運算子的行為。

語法

以下是運算子過載的語法:

static func operatorName()
{
   // body 
}

示例 1

Swift 程式,過載 + 運算子以計算兩個複數的和。

import Foundation
struct ComplexNumber {
   var real: Double
   var imag: Double
        
   // Overloading + operator to add two complex numbers
   static func+(left: ComplexNumber, right: ComplexNumber) -> ComplexNumber {
      return ComplexNumber(real: left.real + right.real, imag: left.imag + right.imag)
   }
}
let complexNumber1 = ComplexNumber(real: 2.1, imag: 2.0)
let complexNumber2 = ComplexNumber(real: 6.1, imag: 9.0)

// Calling + operator to add two complex numbers
let sumOfComplexNumbers = complexNumber1 + complexNumber2
print(sumOfComplexNumbers)

輸出

ComplexNumber(real: 8.2, imag: 11.0)

示例 2

Swift 程式,過載自定義字首運算子。

import Foundation

struct Car {
   var price: Double

   // Overloading the custom prefix operator "++" to increase the price of car
   static prefix func ++ (carPrice: inout Car) {
      carPrice.price += 500000.0
   }
}
var currentPrice = Car(price: 2500000.0)

// Calling the custom ++ operator to increase the car price ++currentPrice 
print("Updated car price is", currentPrice.price) 

輸出

Updated car price is 2500000.0

Swift 中運算子過載的限制

以下是運算子過載的限制:

  • 在 Swift 中,您可以過載有限的運算子,例如算術運算子和自定義運算子。
  • 過載運算子時,不允許更改運算子的優先順序或結合性。
  • Swift 不支援過載邏輯運算子的短路行為。
  • 不要過度使用運算子過載,因為它會使您的程式碼難以閱讀和理解。

運算子函式和普通函式的區別

以下是運算子函式和普通函式的主要區別:

運算子函式 普通函式
它們使用“static func”關鍵字和自定義運算子符號定義。 它們使用“func”關鍵字和函式名定義。
它們用於自定義運算子的行為。 它們用於完成通用任務。
當與自定義型別一起使用運算子時,它們被隱式呼叫。 它們透過函式名顯式呼叫。
它們可以定義為索引、字首或字尾形式。 它們只能定義為中綴形式。
廣告