Swift协议 - 具有任何类型值的Dictionary属性

时间:2016-06-03 10:41:57

标签: swift dictionary

我有一个具有以下属性的协议:

var featureSpecificConfigurationDict: [String: Any] { get set }

这是一个字典,应该有一个String作为关键字,可以将任何类型作为其值,即StringIntBool

当我尝试在符合协议的类中向字典添加键和值时:

var featureSpecificConfigurationDict = ["feature-specific-configuration" : "test"]

我收到以下构建错误:

  

协议要求属性'featureSpecificConfigurationDict'   输入'[String:Any]'

以及:

  

候选人具有不匹配的类型'[String:String]'

我可以将String键值转换为Any,如下所示,但这对我来说似乎不对。

var featureSpecificConfigurationDict = ["feature-specific-configuration" : "test" as Any]

所以我的问题是,如何在接受任何类型值的协议中正确设置字典属性,然后在符合该协议的类中使用它。

3 个答案:

答案 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"]