[英]How to encode a property with type of JSON dictionary in Swift 4 encodable protocol
[英]Swift Protocol - Dictionary property with values of any type
我有一個具有以下屬性的協議:
var featureSpecificConfigurationDict: [String: Any] { get set }
這是一個字典,應該以String
作為鍵,並且可以采用任何類型作為其值,即String
, Int
, Bool
等
當我嘗試向符合以下協議的類的字典中添加鍵和值時:
var featureSpecificConfigurationDict = ["feature-specific-configuration" : "test"]
我收到以下構建錯誤:
協議要求屬性'featureSpecificConfigurationDict'具有類型[[String:Any]'
隨着:
候選人具有不匹配的類型'[String:String]'
我可以將String
鍵值轉換為Any
如下所示,但這對我來說似乎是錯誤的。
var featureSpecificConfigurationDict = ["feature-specific-configuration" : "test" as Any]
所以我的問題是,如何正確設置可以接受任何類型值的協議中的字典屬性,然后在符合該協議的類中使用它。
當您編寫var featureSpecificConfigurationDict = ["feature-specific-configuration" : "test"]
您將在右側進行類型轉換工作。 因此,編譯器認為它是[String: String]
,您應該在左側處理類型,因此請使用以下命令進行聲明:
var featureSpecificConfigurationDict: [String : Any] = ["feature-specific-configuration" : "test"]
編譯器正在查看您提供的字典,並推斷它是[String : String]
。 如果在您的類中將featureSpecificConfigurationDict
聲明為
var featureSpecificConfigurationDict: [String : Any] = ["feature-specific-configuration" : "test"]
它會意識到您希望能夠在其中存儲Any
類型,而不僅僅是在初始值中找到的那些類型,並且還符合您的協議。
String可能與“ Any”兼容,但是[String:String]與[String:Any]不兼容。 寫
var featureSpecificConfigurationDict: [String:Any] = ["feature-specific-configuration" : "test"]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.