簡體   English   中英

Swift協議擴展中變量的無效重新聲明

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM