在Swift 3中,我編寫了一個自定義運算符prefix operator §
,我使用的方法是將String
作爲返回LocalizedString
結構的值(保存鍵和值)。Swift:與點(「。」)相關的自定義運算符的優先級
public prefix func §(key: String) -> LocalizedString {
return LocalizedString(key: key)
}
public struct LocalizedString {
public var key: String
public var value: String
public init(key: String) {
let translated = translate(using: key) // assume we have this
self.key = key
self.value = translated ?? "!!\(key)!!"
}
}
(是的,我知道的真棒L10n enum in SwiftGen,但我們從我們的後臺下載我們的字符串,這個問題更多的是如何與運營商定製合作)
但是,如果我們想要得到的從§
操作符的結果轉換值(即,從所得到的LocalizedString
屬性value
)
let translation = §"MyKey".value // Compile error "Value of type 'String' has no member 'value'"
我們當然可以容易地通過包木窗它解決這個編譯錯誤在括號(§"MyKey").value
中。但如果不想這樣做。 是否可以爲自定義運算符設置與'點'文字關係的優先級?
是的,我知道,只有綴運營商可以聲明優先級,但它會是有意義的,以便與優先莫名其妙地工作,以實現我想要什麼:
precedencegroup Localization { higherThan: DotPrecedence } // There is no such group as "Dot"
prefix operator §: Localization
爲了紀念該斯威夫特編譯器首先應該評估§"MyKey"
並明白這不是一個字符串,但實際上是一個LocalizedString
(結構)。
覺得這不可能是不可能的?我錯過了什麼?
我試過但找不到任何方法,也許我們需要提交一個雷達,但是我很困惑,如果這真的可以稱爲bug。 –