我正在使用Swift,并且想知道是否可以为现有的objective-c块分配闭包。
fromObjC?.performBlock = {someVar in /*do something*/}
它给了我一个错误"无法分配到这个表达式的结果"。
答案 0 :(得分:7)
所有指向Objective-C中对象的指针在swift中必须是Optional,因为指针可以是nil。如果你知道变量实际上永远不会是nil,你应该使用Implicitly Unwrapped Optionals(TypeName!
),这样你就不必打开它了。
所以
void(^performBlock)( UIStoryboardSegue* segue, UIViewController* svc, UIViewController* dvc )
变为:
{(segue : UIStoryboardSegue!, svc : UIViewController!, dvc : UIViewController!) in
// Implementation
}
如果变量可能为nil,则应使用正常的Optional,如下所示:
{(segue : UIStoryboardSegue?, svc : UIViewController?, dvc : UIViewController?) in
// Implementation
}
实际上,如果您将其分配给该属性,您甚至不必指定类型(它们是推断的):
{(segue, svc, dvc) in
// Implementation
}