我有一个具有以下属性的协议:
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]
所以我的问题是,如何在接受任何类型值的协议中正确设置字典属性,然后在符合该协议的类中使用它。
答案 0 :(得分:1)
当你写var featureSpecificConfigurationDict = ["feature-specific-configuration" : "test"]
时,你会向右侧提供类型转换工作。所以编译器认为它是[String: String]
,你应该在左侧处理类型,所以用以下内容声明:
var featureSpecificConfigurationDict: [String : Any] = ["feature-specific-configuration" : "test"]
答案 1 :(得分:1)
编译器正在查看您提供的字典,并推断它是[String : String]
。如果您在课堂上将featureSpecificConfigurationDict
声明为
var featureSpecificConfigurationDict: [String : Any] = ["feature-specific-configuration" : "test"]
它会意识到您希望能够在其中存储Any
类型,而不仅仅是它在初始值中找到的类型,并且还符合您的协议。
答案 2 :(得分:1)
String可能与“Any”兼容,但[String:String]与[String:Any]不兼容。写
var featureSpecificConfigurationDict: [String:Any] = ["feature-specific-configuration" : "test"]