这与宏NS_REFINED_FOR_SWIFT
无关。 Objective-C的 方法
- (BOOL) verifyPersonalizationWithError:(NSError **) error;
导入到快速作为
open func verifyPersonalization() throws
和NS_REFINED_FOR_SWIFT
宏的唯一的作用是前面加上 下划线来迅方法名
open func __verifyPersonalization() throws
它允许在扩展中提供改进的Swift接口,同时保持可用的原始实现d来自精制界面 (参见Swift and Objective-C in the Same Project中的“精炼Objective-C声明”)。
的夫特进口商假定Objective-C的方法的布尔返回值指示成功或 失败,这是常见的可可图案 作为记录在Using and Creating Error Objects:
重要:成功或失败由方法的返回值指示。 尽管在Cocoa错误 域中间接返回错误对象的Cocoa方法可以保证返回这些对象,如果方法通过直接返回nil或NO指示失败 ,您应该始终检查返回 值是否为零或NO,然后尝试对NSError对象做任何事情。
在Objective-C的典型用法是
NSError *error;
if ([self verifyPersonalizationWithError:&error]) {
NSLog(@"success");
} else {
NSLog(@"failed: %@", error.localizedDescription);
}
的夫特方法抛出上失败的错误,所以没有对于一个布尔返回值需要 :
do {
try verifyPersonalization()
print("success")
} catch {
print("failed:", error.localizedDescription)
}
如果Objective-C方法真的通过离开表明失败在所述误差参数(而不是返回false
,这是通常的可可图案)一个非空的错误,那么您可以指示 通过添加属性:
- (BOOL) verifyPersonalizationWithError:(NSError **) error
__attribute__((swift_error(nonnull_error)));
其被导入到快速作为
open func verifyPersonalization() throws -> Bool
的swift_error
属性在https://github.com/apple/swift-clang/blob/383859a9c4b964af3d127b5cc8abd0a8f11dd164/include/clang/Basic/AttrDocs.td#L1800-L1819
证明你有机会检查答案吗?如果您需要更多信息,请告诉我。 –