如何编写带有throws语句的swift 3方法和可以在Objective C中使用的返回值?

cco*_*oom 6 objective-c ios swift swift3

下面的Swift 3方法被翻译成Objective C,如:

func doSomething(param: String) throws // Swift 3

- (BOOL)doSomething:(NSString * _Nonnull)param error:(NSError * _Nullable * _Nullable)error; // Translated Objective C
Run Code Online (Sandbox Code Playgroud)

那么,如何编写一个包含throws和return类型的方法?

func doSomething(param: String) throws -> Int // Swift 3

// Error: Never translated into Objective C
Run Code Online (Sandbox Code Playgroud)

我知道流不应该由NSError对象处理.它只包含有关错误的信息.这就是为什么有一个BOOL返回类型让我们知道调用成功没有任何问题.

那我怎么能用throws语句和返回类型处理一个方法?有没有一种标准的方法来处理这个问题?

先感谢您.

Mar*_*n R 3

Objective-C 中报告成功或失败的标准方法是返回布尔值NOnil对象指针,如 使用和创建错误对象中所述:

重要提示:成功或失败由方法的返回值指示。尽管在 Cocoa 错误域中间接返回错误对象的 Cocoa 方法保证在该方法通过直接返回 nil 或 NO 指示失败时返回此类对象,但在尝试对该方法执行任何操作之前,您应该始终检查返回值是否为 nil 或 NO。 NSError 对象。

所以你可以返回一个对象的实例

func doSomething(param: String) throws -> NSNumber
Run Code Online (Sandbox Code Playgroud)

这被翻译成

- (NSNumber * _Nullable)doSomethingWithParam:(NSString * _Nonnull)param error:(NSError * _Nullable * _Nullable)error;
Run Code Online (Sandbox Code Playgroud)

nil如果抛出错误则返回,或者返回布尔值并通过引用传回其他值

func doSomething(param: String, value: UnsafeMutablePointer<Int>) throws
Run Code Online (Sandbox Code Playgroud)

映射到

- (BOOL)doSomethingWithParam:(NSString * _Nonnull)param value:(NSInteger * _Nonnull)value error:(NSError * _Nullable * _Nullable)error;
Run Code Online (Sandbox Code Playgroud)