我在Swift中遇到过字典的问题,这与我如何定义属性有关。在Objective-C中,可以定义一个字典属性,然后在代码中填写字典。我试图在Swift中定义一个字典作为可选项,并遇到了许多错误。这是我输入的内容。
var URLDictionary : [String:String]?
我尝试通过使用密钥访问字典中的值来设置字符串属性。
self.stringProperty = URLDictionary["Key"]
但是,我收到以下错误消息。
不能下标索引为'[String:String]'的值的值 type'String'
删除?从行
var URLDictionary : [String:String]?
给予
var URLDictionary : [String:String]
错误消息消失了。
我使用的原因是什么?首先是因为当我最初宣布字典属性并且问号消失时我收到了警告。警告是
没有初始值的存储属性“URLDictionary”阻止 合成的初始化器。
我的问题是,您如何定义字典作为可选字典?如果我从一开始就知道字典值,我假设在声明时填充字典是有意义的。
小心,
乔恩
答案 0 :(得分:2)
最好能够修复原始错误,其余的错误应该自行解决,因为您没有处理可选词典。
您的原始错误是:
存储的属性' URLDictionary'没有初始值会阻止合成初始化器。
Xcode抱怨说你已经创建了一个字典但没有给它一个初始值。要为URLDictionary
提供初始值,您可以执行以下任一操作:
1。给URLDictionary
一个空字典的默认属性值(如果你想要,它可能已经包含了键和值)。
class MyClass {
var URLDictionary = [String: String]()
}
2。使用init
方法为URLDictionary
分配值。
class MyClass {
var URLDictionary: [String: String]
init(urlDict: [String: String]) {
self.URLDictionary = urlDict
}
}
如果您想在初始化时给URLDictionary
一个值,第二种方法会更好。
有关详细信息,我建议您查看The Swift Programming Language: Initialization。
如果由于某种原因你仍然想要一个可选的字典,那么让我们看看另一个错误信息:
无法下标类型' [String:String]'索引类型为' String'
不幸的是,该消息有点误导,使用String
作为关键不是问题的原因。相反,我怀疑stringProperty
是String
; 不可选String
。
如果查看文档,您会看到subscript
的{{1}}方法返回一个可选项,指示所提供的密钥是否存在值。
Dictionary
因此,您尝试将可选项(由subscript(key: Key) -> Value?
返回)分配给非可选项(URLDictionary
)。要解决这个问题,您可以使用可选绑定和可选链接,如下所示:
stringProperty
希望有助于回答你的问题。
答案 1 :(得分:-1)
执行此操作var URLDictionary : [String:String]!
我在!
[String:String]
这将告诉编译器它将被定义而不是抛出警告而你不需要使用Optional