Swift中的Optionals和Dictionaries

时间:2015-05-05 21:43:32

标签: swift dictionary

我在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”阻止   合成的初始化器。

我的问题是,您如何定义字典作为可选字典?如果我从一开始就知道字典值,我假设在声明时填充字典是有意义的。

小心,

乔恩

2 个答案:

答案 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作为关键不是问题的原因。相反,我怀疑stringPropertyString; 可选String

如果查看文档,您会看到subscript的{​​{1}}方法返回一个可选项,指示所提供的密钥是否存在值。

Dictionary

因此,您尝试将可选项(由subscript(key: Key) -> Value? 返回)分配给非可选项(URLDictionary)。要解决这个问题,您可以使用可选绑定和可选链接,如下所示:

stringProperty

希望有助于回答你的问题。

答案 1 :(得分:-1)

执行此操作var URLDictionary : [String:String]!我在!

之后添加了[String:String]

这将告诉编译器它将被定义而不是抛出警告而你不需要使用Optional