我想要
func foo(inout stop: Bool) -> Void {
// ...
}
在我的Objective-C部分中使用。但它永远不会在Module-Swift.h头文件中生成。如果我用@objc标记它,
发生错误。方法无法标记@objc,因为参数的类型不能 用Objective-C表示
答案 0 :(得分:22)
在与Objective-C进行桥接时,您无法使用inout
参数,但如果您使用UnsafeMutablePointer<T>
,则可以执行类似操作(T
将为{{1在你的情况下)。它看起来像这样:
Bool
TestClass.swift:
@objc func foo(stop: UnsafeMutablePointer<Bool>) -> Void {
if stop != nil {
// Use the .pointee property to get or set the actual value stop points to
stop.pointee = true
}
}
目标-C:
public class TestClass: NSObject {
@objc func foo(stop: UnsafeMutablePointer<Bool>) -> Void {
stop.pointee = true
}
}
答案 1 :(得分:0)
与泛型发生的情况类似,inout
不是objc兼容的。
一种可能的解决方法是将您的参数嵌入到一个类中(这是一个引用类型,因此通过指针而不是值传递):
@objc class MyFuncParams {
var stop: Bool
init(stop: Bool) {
self.stop = stop
}
}
并定义接受该类实例的函数:
func changeParam(params: MyFuncParams) {
params.stop = true
}
不是解决问题的优雅方式,但重要的是它应该有效(尽管从未尝试过)。