为使用网桥访问的现有objective-c块分配swift闭包(块等效)

Axe*_*xel 0 ios objective-c-blocks swift

我正在使用Swift,并想知道是否有一种方法可以为现有的objective-c块分配一个闭包.

fromObjC?.performBlock = {someVar in /*do something*/}
Run Code Online (Sandbox Code Playgroud)

它给了我一个错误"无法分配给这个表达式的结果".

dre*_*wag 7

所有指向Objective-C中对象的指针在swift中必须是Optional,因为指针可以是nil.如果你知道变量实际上永远不会是nil,你应该使用Implicitly Unwrapped Optionals(TypeName!),这样你就不必打开它了.

所以

void(^performBlock)( UIStoryboardSegue* segue, UIViewController* svc, UIViewController* dvc )
Run Code Online (Sandbox Code Playgroud)

变为:

{(segue : UIStoryboardSegue!, svc : UIViewController!, dvc : UIViewController!) in
    // Implementation
}
Run Code Online (Sandbox Code Playgroud)

如果变量可能为nil,则应使用普通的Optional,如下所示:

{(segue : UIStoryboardSegue?, svc : UIViewController?, dvc : UIViewController?) in
    // Implementation
}
Run Code Online (Sandbox Code Playgroud)

实际上,如果要将其分配给该属性,则甚至不必指定类型(它们是推断的):

{(segue, svc, dvc) in
    // Implementation
}
Run Code Online (Sandbox Code Playgroud)