【发布时间】:2018-03-16 15:56:18
【问题描述】:
我需要创建一个函数foo,它将一个抛出的闭包作为参数。我可以使用 Swift 或 ObjC 来实现它,但我需要能够从两者中调用它。
像这样:
// Swift
func bar() throws
func foo(_ block: () throws -> void)
foo {
try bar()
}
和
// Objc
[self foo:^(
[other barBar];
)];
我尝试使用 Swift 和 ObjC 来实现它,但没有成功。使用 Swift:
@objc
func foo(block: () throws -> Void)
我收到此错误:
方法不能标记@objc,因为参数1的类型不能在Objective-C中表示
如果我尝试用 ObjC 实现它:
typedef BOOL (^ThrowingBlock)(NSError **);
- (void)foo:(ThrowingBlock)block;
然后它不会转换为抛出的块 (as it would with a function):
func foo(_: (NSErrorPointer) -> Bool)
知道如何实现吗?
【问题讨论】:
-
你可能做不到。正如错误消息告诉您的那样,Swift
throws函数不是可能的 Objective-C 参数类型。你必须改变你的欲望。你需要block的类型是Objective-C可以接受的类型。
标签: objective-c swift error-handling closures try-catch