【发布时间】:2018-01-08 23:34:02
【问题描述】:
我似乎不知道如何从 Swift 调用 Objective-C 块!
我有以下 Objective-C 方法:
- (void)myMethod:(NSDictionary *)selection success:(MyBlock)success;
MyBlock 在哪里:
typedef void(^MyBlock)(BOOL success, NSDictionary* options);
它要么抱怨它不能投射:
"Cannot convert value of type '(Bool, Dictionary<AnyHashable, Any>) -> ()' to expected argument type 'MyBlock!' (aka 'ImplicitlyUnwrappedOptional<(Bool, Optional<Dictionary<AnyHashable, Any>>) -> ()>')"
或者当我尝试使用以下任何一种方法从 Swift 调用该方法时,我得到了一个 SIGABRT:
myInstance.myMethod(myOptions) { (success, options) in
...
}
myInstance.myMethod(myOptions) { (success: Bool, options: Dictionary<AnyHashable, Any>?) in
...
}
myInstance.myMethod(myOptions) { (success: Bool!, options: [AnyHashable: Any]?) in
...
}
myInstance.myMethod(myOptions, success: { (success, options) in
...
})
myInstance.myMethod(myOptions, success: { (success, options) in
...
} as MyBlock)
myInstance.myMethod(myOptions, success: { (success: Bool, options: Dictionary<AnyHashable, Any>?) in
...
})
myInstance.myMethod(myOptions, success: { (success: Bool!, options: Dictionary<AnyHashable, Any>?) in
...
})
myInstance.myMethod(myOptions, success: { (success: Bool!, options: Dictionary<AnyHashable, Any>?) in
...
} as MyBlock)
myInstance.myMethod(myOptions, success: { (success: Bool!, options: [AnyHashable: Any]?) in
...
})
myInstance.myMethod(myOptions, success: { (success: Bool, options: [AnyHashable: Any]?) in
...
})
我该怎么办?
【问题讨论】:
-
能否提供一个最小的示例项目,让我们轻松测试和尝试事物?
-
我已经上传了一个简单的演示应用程序到:github.com/ChrisAllinson/IosBridgeExample ...但它似乎工作:| ...也许我的其他应用程序的问题在于投射/分配,因为它确实抱怨说它试图投射到“ImplicitlyUnwrappedOptional”......想法?
-
你运行的是什么版本的 Swift?这在 Swift 3.2 下编译得很好,这是我的 Xcode 版本支持的最低版本
-
对,这个简单的演示应用确实可以工作……但我正在开发的另一个应用却不行。我很困惑,想知道为什么它认为它是“ImplicitlyUnwrappedOptional”......任何熟悉的人? (感谢您的帮助)!
-
Ohhh 似乎可以工作”,没看到。您的原始应用程序使用的是哪个版本的 Swift?
ImplicitluunwrappedOptional是存在 before Swift 3 的类型
标签: swift closures objective-c-blocks bridging