2016-03-08 38 views
1

我獲得以下誤差的一個值:投擲方法不能是@objc協議中的一員,因爲它返回類型「布爾」

Throwing method cannot be a member of an @objc protocol because it returns a value of type 'Bool'; return 'Void' or a type that bridges to an Objective-C class 

當定義夫特協議,還需要橋接到目標C :

@objc public protocol Saving { 

    func save() throws -> Bool 
} 

是否有其他的方式來定義它可以返回Bool斯威夫特方法,可能會引發錯誤,並Objetive-C兼容嗎?

+3

爲什麼你想要返回一個Bool *和* throw?成功/失敗通過返回真/假或投擲來表示。 - ''func save()throws'將被轉換爲Objective-C爲' - (BOOL)saveAndReturnError:(NSError **)error;' –

+0

「Swift with Cocoa and Objective-C」Swift function throwing錯誤將被轉換爲返回BOOL的Objective-C方法。 – Lukasz

+0

我現在實際測試了它,並查看了Swift生成的頭文件,你是對的。 – Lukasz

回答

2

作爲評價指出的,在夫特以下:

func save() throws

將被翻譯成:

(BOOL)saveAndReturnError:(NSError **)error

在Objective-C

。這解釋了限制。

我知道在save()的例子中,返回Bool以及拋出可能沒有多大意義,但我不同意關於它根本沒有意義的評論。可能有其他用例是有意義的。 FX。反例;使用標識符加載Bool。如果加載失敗,則加載Bool可能會返回true/falsethrow fx。如果在嘗試加載時未找到標識符。

不幸的是,我們無法做到這一點,因爲Swift和Objective-C如何被橋接。

相關問題