gpt4 book ai didi

objective-c - 强制 Objective-C 方法返回 `id` 和 inout NSError 以桥接到可选返回

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

考虑这个 Objective-C 类:

@interface TestAPI : NSObject

-(nullable id)aNullableMethod;

-(nullable id)aNullableMethodWithError:(inout NSError **)error;

@end

我正在使用 TestAPI 作为抽象基类,并希望在 Swift 中继承它。

Swift 将此代码桥接到如下所示(即对应菜单 -> Swift 4.2 接口(interface)):

open class TestAPI : NSObject {

open func aNullableMethod() -> Any?

open func aNullableMethodWithError() throws -> Any
}

问题是 aNullableMethodWithError() 可以返回 nil 作为有效值。

我如何说服 Swift aNullableMethodWithError() 返回 Any? 而不是 Any

或者有没有更好的方法来编写 Objective-C 方法签名?

最佳答案

您可能需要使用 NS_SWIFT_NOTHROW:

-(nullable id)aNullableMethodWithError:(inout NSError **)error NS_SWIFT_NOTHROW;

这是导入到 Swift 中的:

open func aNullableMethodWithError(_ error: NSErrorPointer) -> Any?

如果您想将您的方法导入为throws-函数,您可能需要更改方法签名以遵循约定:

  • 返回 true 或在没有错误时返回非 nil
  • 错误时返回false或nil

像这样:

-(BOOL)aNullableMethod:(id*)object withError:(inout NSError **)error;

在 Swift 中:

open func aNullableMethod(_ object: AutoreleasingUnsafeMutablePointer<AnyObject?>!) throws

关于objective-c - 强制 Objective-C 方法返回 `id` 和 inout NSError 以桥接到可选返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52395051/

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