Swift:声明一个空字典

z22*_*z22 167 dictionary ios swift

我开始学习swift遵循The Swift Programming LanguageApple提供的iBook- on Swift.该书说要创建一个空字典,应该使用[:]相同的方法,同时将数组声明为[]:

我声明了一个空数组如下:

let emptyArr = [] // or String[]()
Run Code Online (Sandbox Code Playgroud)

但是在声明空字典时,我得到语法错误:

let emptyDict = [:]
Run Code Online (Sandbox Code Playgroud)

如何申报空字典?

dam*_*hec 287

var emptyDictionary = [String: String]()
Run Code Online (Sandbox Code Playgroud)

­

var populatedDictionary = ["key1": "value1", "key2": "value2"]
Run Code Online (Sandbox Code Playgroud)

注意:如果要随时间更改字典的内容,则将其声明为var(变量).您可以将空字典声明为let(常量),但如果您打算随时间更改其内容,则无意义,因为常量在初始化后无法更改.


老答案:

创建类型的空字典<String, String>将如下所示:

var emptyDictionary = Dictionary<String, String>()
Run Code Online (Sandbox Code Playgroud)

  • 当然你不能声明一个const字典并让它变空?你永远无法为它添加值? (2认同)

Gab*_*lla 38

[:]除非有类型信息,否则您无法使用.

在这种情况下,您需要明确提供它:

var dict = Dictionary<String, String>()
Run Code Online (Sandbox Code Playgroud)

var意味着它是可变的,所以你可以添加条目.相反,如果你做了一个,let那么你就无法进一步修改它(let意味着不变).

[:]例如,如果可以推断出类型信息,则可以使用简写表示法

var dict = ["key": "value"]

// stuff

dict = [:] // ok, I'm done with it
Run Code Online (Sandbox Code Playgroud)

在最后一个示例中,已知字典具有Dictionary<String, String>第一行的类型.请注意,您不必明确指定它,但已推断出它.


Sur*_*gch 27

斯威夫特文件建议通过以下方式来初始化一个空的字典:

var emptyDict = [String: String]()
Run Code Online (Sandbox Code Playgroud)

当我第一次遇到这个问题时,我有点困惑,因为不同的答案显示了初始化空字典的不同方法.事实证明,实际上有很多方法可以做到这一点,尽管有些方法有点多余或过于冗长,因为Swift能够推断出类型.

var emptyDict = [String: String]()
var emptyDict = Dictionary<String, String>()
var emptyDict: [String: String] = [:]
var emptyDict: [String: String] = [String: String]()
var emptyDict: [String: String] = Dictionary<String, String>()
var emptyDict: Dictionary = [String: String]()
var emptyDict: Dictionary = Dictionary<String, String>()
var emptyDict: Dictionary<String, String> = [:]
var emptyDict: Dictionary<String, String> = [String: String]()
var emptyDict: Dictionary<String, String> = Dictionary<String, String>()
Run Code Online (Sandbox Code Playgroud)

有了一个空字典后,你可以像这样添加一个键值对:

emptyDict["some key"] = "some value"
Run Code Online (Sandbox Code Playgroud)

如果要再次清空字典,可以执行以下操作:

emptyDict = [:]
Run Code Online (Sandbox Code Playgroud)

类型仍然<String, String>是因为它是如何初始化的.


Lim*_*ean 19

使用这将工作.

var emptyDict = [String: String]()
Run Code Online (Sandbox Code Playgroud)


Jio*_*Jio 15

您可以简单地声明它:

var emptyDict:NSMutableDictionary = [:]
Run Code Online (Sandbox Code Playgroud)


nev*_*ing 6

你必须给字典一个类型

// empty dict with Ints as keys and Strings as values
var namesOfIntegers = Dictionary<Int, String>()
Run Code Online (Sandbox Code Playgroud)

如果编译器可以推断出类型,则可以使用较短的语法

namesOfIntegers[16] = "sixteen"
// namesOfIntegers now contains 1 key-value pair
namesOfIntegers = [:]
// namesOfIntegers is once again an empty dictionary of type Int, String
Run Code Online (Sandbox Code Playgroud)


Sye*_*bas 6

在 Swift 中声明和初始化字典

字符串字典

var stringDict: [String: String] = [String: String]()
Run Code Online (Sandbox Code Playgroud)

或者

var stringDict: Dictionary<String, String> = Dictionary<String, String>()
Run Code Online (Sandbox Code Playgroud)

整数词典

var stringDict: [String: Int] = [String: Int]()
Run Code Online (Sandbox Code Playgroud)

或者

var stringDict: Dictionary<String, Int> = Dictionary<String, Int>()
Run Code Online (Sandbox Code Playgroud)

任意对象字典

var stringDict: [String: AnyObject] = [String: AnyObject]()
Run Code Online (Sandbox Code Playgroud)

或者

var stringDict: Dictionary<String, AnyObject> = Dictionary<String, AnyObject>()
Run Code Online (Sandbox Code Playgroud)

字符串数组字典

var stringDict: [String: [String]] = [String: [String]]()
Run Code Online (Sandbox Code Playgroud)

或者

var stringDict: Dictionary<String, Array<String>> = Dictionary<String, Array<String>>()
Run Code Online (Sandbox Code Playgroud)

字符串字典数组

var stringDict: [[String: String]] = [[String: String]]()
Run Code Online (Sandbox Code Playgroud)

或者

var stringDict: Array<Dictionary<String, String>> = Array<Dictionary<String, String>>()
Run Code Online (Sandbox Code Playgroud)


Jua*_*ero 5

迅速:

var myDictionary = Dictionary<String, AnyObject>()
Run Code Online (Sandbox Code Playgroud)