我有一个具有以下属性的协议(protocol):
var featureSpecificConfigurationDict: [String: Any] { get set }
它是一个字典,应该有一个 String
作为键,可以接受任何类型作为它的值,即 String
, Int
, Bool
等
当我尝试向符合协议(protocol)的类中的字典添加键和值时:
var featureSpecificConfigurationDict = ["feature-specific-configuration" : "test"]
我收到以下构建错误:
Protocol requires property 'featureSpecificConfigurationDict' with type '[String : Any]'
连同:
Candidate has non-matching type '[String : String]'
我可以像下面那样将 String
键值转换为 Any
但这对我来说似乎是错误的。
var featureSpecificConfigurationDict = ["feature-specific-configuration" : "test" as Any]
所以我的问题是,如何在接受任何类型值的协议(protocol)中正确设置字典属性,然后在符合该协议(protocol)的类中使用它。
最佳答案
编译器正在查看您提供的字典并推断它是一个[String : String]
。如果在您的类中声明 featureSpecificConfigurationDict
为
var featureSpecificConfigurationDict: [String : Any] = ["feature-specific-configuration" : "test"]
它会意识到您希望能够在其中存储 Any
类型,而不仅仅是那些它在初始值中找到的类型,并且还符合您的协议(protocol)。
关于Swift 协议(protocol) - 具有任何类型值的字典属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37612241/