[英]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.