在我的銀行代碼(在一個框架),我伸出的UIColor支持乘法和加法運算這樣的:爲什麼我在Swift中使用自動生成的框架頭文件得到這個錯誤?
public protocol Interpolatable {
static func * (lhs: Self, rhs: Double) -> Self
static func + (lhs: Self, rhs: Self) -> Self
}
extension UIColor: Interpolatable {
public static func *(lhs: UIColor, rhs: Double) -> Self {
var r = CGFloat(0), g = CGFloat(0), b = CGFloat(0), a = CGFloat(0)
let t = CGFloat(rhs)
lhs.getRed(&r, green: &g, blue: &b, alpha: &a)
return self.init(red: r * t, green: g * t, blue: b * t, alpha: a * t)
}
public static func +(lhs: UIColor, rhs: UIColor) -> Self {
var lhsR = CGFloat(0), lhsG = CGFloat(0), lhsB = CGFloat(0), lhsA = CGFloat(0)
var rhsR = CGFloat(0), rhsG = CGFloat(0), rhsB = CGFloat(0), rhsA = CGFloat(0)
lhs.getRed(&lhsR, green: &lhsG, blue: &lhsB, alpha: &lhsA)
rhs.getRed(&rhsR, green: &rhsG, blue: &rhsB, alpha: &rhsA)
return self.init(red: lhsR + rhsR, green: lhsG + rhsG, blue: lhsB + rhsB, alpha: lhsA + rhsA)
}
}
如預期在操場或在一個獨立的項目,工作完美,但是當我把它在一個框架中的編譯器在框架頭部MyFramework-Swift.h
生成此代碼:
@interface UIColor (SWIFT_EXTENSION(Animation))
+ (nonnull instancetype)*:(UIColor * _Nonnull)lhs :(double)rhs;
+ (nonnull instancetype)+:(UIColor * _Nonnull)lhs :(UIColor * _Nonnull)rhs;
@end
而這種生成的代碼產生這樣的錯誤:
error: expected selector for Objective-C method
+ (nonnull instancetype)*:(UIColor * _Nonnull)lhs :(double)rhs;
^
(隨着對+
運營商相同的錯誤)
我認爲這只是用來從Objective-C的訪問框架,因爲如果我直接刪除這個頭文件的內容我的項目建立和正常運行。
這是Xcode或Swift工具鏈中的一個皺摺,還是我錯過了我應該做的重載操作符這樣的事情?請注意,我對編譯器試圖做什麼感興趣,以及爲什麼這是一個問題,而不僅僅是解決方法的簡短答案或修復它。
奇怪。我認爲它不應該包括Objective-C陸地上的定製操作符...... – nhgrif