gpt4 book ai didi

ios - Swift 转换后的 Objective-C 方法签名相同

转载 作者:搜寻专家 更新时间:2023-10-31 08:08:29 25 4
gpt4 key购买 nike

我的 objective-c 库中有两个方法,在转换为 Swift 后,它们似乎具有相同的方法签名。它们在 Objective-C 中如下:

- (void)doSomething:(UIViewController *)viewController __attribute__((deprecated));
- (BOOL)doSomething:(UIViewController *)viewController error:(NSError **)error;

从我读到的关于在 Objective-C 中使用 NSErrors + BOOL 返回值的方法的 Swift 转换,这些方法最终将具有以下 Swift 方法签名:

func doSomething(viewController: UIViewController)
func doSomething(viewController: UIViewController) throws

由于第一个调用在 Objective-C 中实际上已被弃用,是否有办法强制调用此方法以使用第二个签名(确保我可以利用抛出的错误)?

我尝试通过以下方式调用该方法:

do {
try myObjectInstance.doSomething(self)
} catch let error as NSError {
print(error)
}

这种方法似乎默认使用第一个声明,它给我一个警告:a) 该方法已被弃用,b) 没有什么可捕捉的,因为没有抛出错误。

最佳答案

您可以使用 NS_SWIFT_UNAVAILABLE 宏将其标记为对 Swift 不可用:

- (void)doSomething:(UIViewController *)viewController
__attribute__((deprecated)) NS_SWIFT_UNAVAILABLE("use the throwing variant");

然后 Swift 编译器将选择唯一可用的方法,即另一个。

(在我的测试中,这似乎会破坏自动完成功能——您可能需要 file a bug 了解这一点。)

关于ios - Swift 转换后的 Objective-C 方法签名相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32745855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com