Mai*_*ixy 5 objective-c ios swift swift2
我在objective-c库中有两个方法,在转换为Swift之后,似乎有相同的方法签名.它们在Objective-C中如下:
- (void)doSomething:(UIViewController *)viewController __attribute__((deprecated));
- (BOOL)doSomething:(UIViewController *)viewController error:(NSError **)error;
Run Code Online (Sandbox Code Playgroud)
根据我在Objective-C中使用NSErrors + BOOL返回值的Swift转换方法的内容,这些方法将最终得到以下Swift方法签名:
func doSomething(viewController: UIViewController)
func doSomething(viewController: UIViewController) throws
Run Code Online (Sandbox Code Playgroud)
由于在Objective-C中实际上不推荐第一个调用,是否有办法强制对此方法的调用使用第二个签名(确保我可以利用抛出的错误)?
我试图以下列方式调用该方法:
do {
try myObjectInstance.doSomething(self)
} catch let error as NSError {
print(error)
}
Run Code Online (Sandbox Code Playgroud)
这种方法似乎默认为第一个声明,它给了我一个警告:a)该方法已被弃用,b)没有什么可以捕获的,因为没有抛出错误.
您可以使用NS_SWIFT_UNAVAILABLE宏将其标记为 Swift 不可用:
- (void)doSomething:(UIViewController *)viewController\n __attribute__((deprecated)) NS_SWIFT_UNAVAILABLE("use the throwing variant");\nRun Code Online (Sandbox Code Playgroud)\n\n然后 Swift 编译器将选择唯一可用的方法,即另一个方法。
\n\n(在我的测试中,这似乎破坏了自动完成 \xe2\x80\x94 你可能想提交一个关于它的错误。)
\n| 归档时间: |
|
| 查看次数: |
315 次 |
| 最近记录: |