簡體   English   中英

在swift中重載Single Equals

[英]Overload Single Equals in swift

我有一個奇怪的情況,我似乎無法讓單一等於超載

這很好用:

public func /=<T: ConvertibleUnit>(inout left: T, right: Int) {
    left.value = (left.value / Double(right))
}

一旦我改為:

public func =<T: ConvertibleUnit>(inout left: T, right: Int) {
    left.value = Double(right)
}

我收到錯誤:

運算符實現沒有匹配運算符聲明

我有什么瘋狂的東西嗎?

我玩中綴並沒有做太多。 我假設其解釋=錯誤?

我很害怕,沒有骰子。 語言參考

標記=, - >,//,/ *,* / ,.,前綴運算符<,&,和?,中綴運算符?,以及后綴運算符>,!和? 保留。 這些令牌不能超載,也不能用作自定義操作符。

相反,如果您希望ConvertibleUnit始終可以從Int創建,請為協議提供init(_ val: Int)方法,以便人們可以寫let unit = T(42) 或者甚至可以考慮讓它符合IntegerLiteralConvertible

通常,Swift中的首選樣式不是在不同類型之間進行自動/隱式轉換。 這就是為什么,例如,必須先將Int轉換為Double然后才能將其添加到另一個Double

當然,你可以寫這樣的東西:

func +(lhs: Int, rhs: Double) -> Double {
    return Double(lhs) + rhs
}

let i = 1
let f = 1.2
i + f   // = 2.2

但這通常不被視為良好做法。

正如Apple官方文檔中所述

無法重載默認賦值運算符(=)。 只有復合賦值運算符才能重載。 類似地,三元條件運算符(a?b:c)不能過載。

您可以使用中infix創建一個新的運算符,但遺憾的是您不能重載'='。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM