Swift:声明一个空字典

时间:2014-06-04 09:12:42

标签: ios swift dictionary

我开始通过关注Apple提供的Swift上的iBook - swift来学习The Swift Programming Language。该书说要创建一个空字典,应该使用[:],同时将数组声明为[]

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

let emptyArr = [] // or String[]()

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

let emptyDict = [:]

如何声明空字典?

19 个答案:

答案 0 :(得分:276)

var emptyDictionary = [String: String]()

var populatedDictionary = ["key1": "value1", "key2": "value2"]

注意:如果您要随时间更改字典的内容,请将其声明为var(变量)。你可以将一个空字典声明为let(常量),但如果你打算随着时间的推移改变它的内容是没有意义的,因为常数不能改变之后初始化。


旧答案

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

var emptyDictionary = Dictionary<String, String>()

答案 1 :(得分:38)

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

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

var dict = Dictionary<String, String>()

var表示它是可变的,因此您可以向其中添加条目。 相反,如果您将其设为let,则无法进一步修改它(let表示常量)。

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

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

// stuff

dict = [:] // ok, I'm done with it

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

答案 2 :(得分:27)

Swift documentation建议使用以下方法初始化空字典:

var emptyDict = [String: String]()

当我第一次遇到这个问题时,我有点困惑,因为不同的答案显示了初始化空字典的不同方法。事实证明,实际上有很多方法可以做到这一点,尽管有些方法有点多余或过于冗长,因为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>()

拥有空字典后,您可以添加如下键值对:

emptyDict["some key"] = "some value"

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

emptyDict = [:]

类型仍为<String, String>,因为它是初始化的方式。

答案 3 :(得分:19)

使用此功能。

var emptyDict = [String: String]()

答案 4 :(得分:15)

您可以简单地声明:

var emptyDict:NSMutableDictionary = [:]

答案 5 :(得分:6)

你必须给字典一个类型

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

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

namesOfIntegers[16] = "sixteen"
// namesOfIntegers now contains 1 key-value pair
namesOfIntegers = [:]
// namesOfIntegers is once again an empty dictionary of type Int, String

答案 6 :(得分:5)

<强>夫特:

var myDictionary = Dictionary<String, AnyObject>()

答案 7 :(得分:4)

我也在玩这个。你可以声明一个空字典,然后像这样添加一个键/值对,这似乎很奇怪:

var emptyDictionary = Dictionary<String, Float>()
var flexDictionary = [:]
emptyDictionary["brian"] = 4.5
flexDictionary["key"] = "value" // ERROR : cannot assign to the result of this expression

但您可以使用“Any”类型创建一个接受不同值类型的Dictionary,如下所示:

var emptyDictionary = Dictionary<String, Any>()
emptyDictionary["brian"] = 4.5
emptyDictionary["mike"] = "hello"

答案 8 :(得分:4)

Swift 4

let dicc = NSDictionary()

//MARK: - This is empty dictionary
let dic = ["":""]

//MARK:- This is variable dic means if you want to put variable 
let dic2 = ["":"", "":"", "":""]

//MARK:- Variable example
let dic3 = ["name":"Shakeel Ahmed", "imageurl":"https://abc?abc.abc/etc", "address":"Rawalpindi Pakistan"]

//MARK: - This is 2nd Variable Example dictionary
let dic4 = ["name": variablename, "city": variablecity, "zip": variablezip]

//MARK:- Dictionary String with Any Object
var dic5a = [String: String]()
//MARK:- Put values in dic
var dic5a = ["key1": "value", "key2":"value2", "key3":"value3"]

var dic5b = [String:AnyObject]()
dic5b = ["name": fullname, "imageurl": imgurl, "language": imgurl] as [String : AnyObject]

or
//MARK:- Dictionary String with Any Object
let dic5 = ["name": fullname, "imageurl": imgurl, "language": imgurl] as [String : AnyObject]

//MARK:- More Easy Way
let dic6a = NSDictionary()
let dic6b = NSMutalbeDictionary()

答案 9 :(得分:3)

当您在Swift中声明任何内容时,您需要明确告诉数据类型或类型。

Swift 3

下面的示例声明了一个字典,其中键为Int类型,值为String类型。

方法1:初始化程序

let dic = Dictionary<Int, String>()

方法2:速记语法

let dic = [Int:String]()

方法3:字典文字

var dic = [1: "Sample"]
// dic has NOT to be a constant
dic.removeAll()

答案 10 :(得分:2)

在Swift中声明和初始化字典

字符串字典

var stringDict: [String: String] = [String: String]()

OR

var stringDict: Dictionary<String, String> = Dictionary<String, String>()

Intictionary

var stringDict: [String: Int] = [String: Int]()

OR

var stringDict: Dictionary<String, Int> = Dictionary<String, Int>()

AnyObject词典

var stringDict: [String: AnyObject] = [String: AnyObject]()

OR

var stringDict: Dictionary<String, AnyObject> = Dictionary<String, AnyObject>()

字符串数组字典

var stringDict: [String: [String]] = [String: [String]]()

OR

var stringDict: Dictionary<String, Array<String>> = Dictionary<String, Array<String>>()

字符串字典数组

var stringDict: [[String: String]] = [[String: String]]()

OR

var stringDict: Array<Dictionary<String, String>> = Array<Dictionary<String, String>>()

答案 11 :(得分:2)

如果要创建任何类型的通用字典

var dictionaryData = [AnyHashable:Any]()

答案 12 :(得分:1)

我经常使用

var dictionary:[String:String] = [:]
dictionary.removeAll()

答案 13 :(得分:0)

要使用 [:] aka the empty dictionary literal 创建一个空字典,您实际上需要首先提供上下文,如键和值的类型。使用 [:] 创建空字典的正确方法是:

var dict: [String: Int] = [:]

答案 14 :(得分:0)

您可以使用以下代码:

var d1 = Dictionary<Int, Int>()
var d2 = [Int: Int]()
var d3: Dictionary<Int, Int> = [Int : Int]()
var d4: [Int : Int] = [:]

答案 15 :(得分:0)

您可以使用以下内容将其声明为nil:

var assoc : [String:String]

然后好的是你已经排版了(注意我使用了var而不是让它,把它们想象成可变和不可变的)。然后你可以稍后填写:

assoc = ["key1" : "things", "key2" : "stuff"]

答案 16 :(得分:-1)

var dictList = String:swift中字典的字符串  var arrSectionTitle = swift中数组的字符串

答案 17 :(得分:-2)

var parking = [Dictionary < String, Double >()]

^这会为[string:double]输入

添加字典

答案 18 :(得分:-2)

找到自己的方式非常方便

var dict:Dictionary = [:]