3

考虑这个 Objective-C 类:

@interface TestAPI : NSObject

-(nullable id)aNullableMethod;

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

@end

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

Swift 将此代码桥接成如下所示(即对应菜单 -> Swift 4.2 界面):

open class TestAPI : NSObject {

    open func aNullableMethod() -> Any?

    open func aNullableMethodWithError() throws -> Any
}

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

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

还是有更好的方法来编写 Objective-C 方法签名?

4

1 回答 1

4

您可能需要使用NS_SWIFT_NOTHROW

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

这被导入到 Swift 中:

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

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

  • true无错误返回或非零
  • 错误返回false或 nil

像这样的东西:

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

在斯威夫特:

open func aNullableMethod(_ object: AutoreleasingUnsafeMutablePointer<AnyObject?>!) throws
于 2018-09-18T22:14:06.137 回答