[英]Swift protocol with generic method: invalid redeclaration of implementation
[英]Invalid Redeclaration of Variable in Swift Protocol Extension
據我了解,在Swift中,協議描述了可以應用於數據結構的屬性。 然后,協議擴展允許針對每個屬性所應用的數據結構定義這些屬性。
如果是這樣,為什么會出現以下錯誤:
無效的“無效”聲明
在這行上:
extension CausesError where Self: Example { var invalid: Bool { return true } }
在此代碼中:
struct Example: CausesError { }
protocol CausesError { var invalid: Bool { get } }
extension CausesError where Self: Example { var invalid: Bool { return true } }
只是為了綜合@dfri對於稍后看到的用戶所說的內容,實際的錯誤是由以下原因引起的:
extension CausesError where Self: Example
因為Example是結構,所以沒有Self屬性。
問題是我對協議擴展有一個基本的誤解。
struct是具體類型,因此定義無效的“默認實現”將簡單地響應符合協議。 [一個]可以選擇通過擴展而不是聲明使Example符合CausesError:
extension Example: CausesError { var invalid: Bool { return true } }
但這主要是語義(直接兼容)。 但是,這與提供默認實現(對於一組對象(例如,從類類型派生或遵循某種協議的對象))不同,而僅僅是通過特定類型對給定協議的遵循。
因此,我應該做的就是(為了在協議級別甚至對數據類型提供默認實現):
extension CausesError { var invalid: Bool { return false } }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.