Objective c swift中块内的协议语法
我有一个接受块的方法,目标C中的方法签名是Objective c swift中块内的协议语法,objective-c,swift,protocols,objective-c-blocks,Objective C,Swift,Protocols,Objective C Blocks,我有一个接受块的方法,目标C中的方法签名是 - (void) startWithFinishingBlock:(FinishingBlock _Nonnull)finishingBlock; 我有下面的typedef FinishingBlock typedef void (^FinishingBlock)(id<Operation> _Nonnull operation); 但是我知道它不应该是任何对象,我想在这里找到一个符合协议的对象。我如何在swift中定义这一点 另外一件
- (void) startWithFinishingBlock:(FinishingBlock _Nonnull)finishingBlock;
我有下面的typedef FinishingBlock
typedef void (^FinishingBlock)(id<Operation> _Nonnull operation);
但是我知道它不应该是任何对象
,我想在这里找到一个符合
协议的对象。我如何在swift中定义这一点
另外一件事是,我的代码中有一个操作类和一个
协议。因此,基本上操作
类符合
协议当您不确定时,您可以推断正确的类型,例如:
operation?.start { operation in
// ...
}
为了完整起见,语法(既不使用上述尾随闭包语法,也不推断类型)为:
operation?.start(finishing: { (operation: MyApp.Operation) -> Void in
// ...
})
因为您的<代码>操作< /代码>协议与基础<代码>操作< /C> >类型(即,在SWIFT 3中的<代码> NScase< /代码>的新名称)中,您必须用您的目标名称(在上面的示例中<代码> MyApp)限定您的协议名称。这是推断参数类型的优点,因为您不必处理这个问题
无论如何,如果您有机会,我建议您重命名操作
协议,以避免将来出现任何混乱
operation?.start(finishing: { (operation: MyApp.Operation) -> Void in
// ...
})