繁体   English   中英

Swift通讯协定-具有任何类型值的Dictionary属性

[英]Swift Protocol - Dictionary property with values of any type

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

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]

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

当您编写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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM