从 Objective-C 调用 Swift 扩展函数的语法
Syntax to Call Swift Extension Function from Objective-C
我有一个包含 objective-c 和 swift 的项目。一切都已正确连接,因此我通常可以毫无问题地调用 类 上的分机。然而,在这种情况下,我必须将一个参数传递给扩展并且我被语法挂断了。
这是 Swift 3 分机
extension Double {
/// Rounds the double to decimal places value
func rounded(toPlaces places:Int) -> Double {
let divisor = pow(10.0, Double(places))
return (self * divisor).rounded() / divisor
}
}
从 Swift 你可以用
调用它
let x = Double(0.123456789).rounded(toPlaces: 4)
以下内容在 Objective-C 中不起作用:我试过它但无法获得正确的语法:
double test = 0.123456789;
double roundedtot = test.roundedToPlaces:2;
具体错误是
'Member reference base type 'double' is not a structure or union'
我收集到的是一个 c 错误,但由于您可以在 swift 中调用该函数,因此似乎应该有一种方法可以在 Objc-C
中调用它
您需要将 @objc
添加到扩展定义中才能从 Objective-C 调用它。
此外,重要的是要注意只有 类 的扩展(not 用于结构或枚举)可以从Objective-C.
我有一个包含 objective-c 和 swift 的项目。一切都已正确连接,因此我通常可以毫无问题地调用 类 上的分机。然而,在这种情况下,我必须将一个参数传递给扩展并且我被语法挂断了。
这是 Swift 3 分机
extension Double {
/// Rounds the double to decimal places value
func rounded(toPlaces places:Int) -> Double {
let divisor = pow(10.0, Double(places))
return (self * divisor).rounded() / divisor
}
}
从 Swift 你可以用
调用它let x = Double(0.123456789).rounded(toPlaces: 4)
以下内容在 Objective-C 中不起作用:我试过它但无法获得正确的语法:
double test = 0.123456789;
double roundedtot = test.roundedToPlaces:2;
具体错误是
'Member reference base type 'double' is not a structure or union'
我收集到的是一个 c 错误,但由于您可以在 swift 中调用该函数,因此似乎应该有一种方法可以在 Objc-C
中调用它您需要将 @objc
添加到扩展定义中才能从 Objective-C 调用它。
此外,重要的是要注意只有 类 的扩展(not 用于结构或枚举)可以从Objective-C.