這與宏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
證明你有機會檢查答案嗎?如果您需要更多信息,請告訴我。 –