![](/img/trans.png)
[英]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.