在Swift中制作相同类型字典的空副本

时间:2015-04-28 20:16:56

标签: swift dictionary

在我的班级var部分,我有类似的东西:

class Foobar {
    var things:[String:Thing] = [:]
    ...
}

稍后,我可能有一个想要创建相同类型的字典的函数。但它并非直接来自原版,所以我不能使用一些内置函数来直接制作它。所以我最终重复了一遍

var newThings[String:Thing] = [:]

是否有一些语法/方式我可以做类似

的事情
var newThing = self.things.emptyCopy()

这样我就不必重复这些类型,它只是与原始变量相同的类型注释?

3 个答案:

答案 0 :(得分:3)

您可以使用dynamicType来获取变量的类型, 并使用它来创建一个与init()构造函数相同类型的新(空)实例:

var things : [String : Int] = [ "foo" : 1, "bar" : 2]

var newThings = things.dynamicType() // Type is [String : Int]
println(newThings) // [:]

newThings["baz"] = 3
println(newThings) // [baz: 3]

答案 1 :(得分:2)

  

是否有一些语法/方式我可以做类似

的事情
var newThing = self.things.emptyCopy()

像这样:

var newThing = self.things
newThing.removeAll()

答案 2 :(得分:1)

  

这样我就不必重复类型

根据您的实际需要,可能会使用typealias吗?

typealias MyDict = [String:Int]

class Foobar {
    var things:MyDict = [:]
}

var newThings:MyDict = [:]

此解决方案的一个好处是,您可以通过为别名选择一个好名称来明确为什么这两个变量属于同一类型。