在Swift中将Dictionary类型附加到Array

时间:2015-06-14 13:02:59

标签: arrays swift append

我对Swift很新,我现在将Objective-C代码转换为Swift。

我声明了这些属性:

private var startLocation: UInt?
private var rangeIndex: UInt?
private var transaction: Array<Dictionary<String, UInt>>?
var location: UInt?

尝试在事务数组中添加Dictionary类型时,编译器会发出警告。

  

无法调用&#39;追加&#39;使用类型&#39;([String:UInt?])&#39;

的参数列表
func beginTransaction() -> Void {
    var transaction: Dictionary = ["rangeIndex": self.rangeIndex,
                                     "location": self.location,
                                "startLocation": self.startLocation]
    self.transaction?.append(transaction) //Warn: Cannot invoke 'append' with an argument list of type '([String: UInt?])'
}

3 个答案:

答案 0 :(得分:1)

这是因为您的数组是<String, UInt>,但您追加<String, UInt?>

确保它们是相同的。

答案 1 :(得分:1)

此警告说得非常清楚:transaction内的字典值为UInt,且不能为零。但您的startLocationrangeIndexlocation可能为零。

答案 2 :(得分:1)

!添加到self.rangeIndexself.locationself.startLocation作为隐式解包的可选项,警告随后会消失。

func beginTransaction() -> Void {
    var transaction: Dictionary = ["rangeIndex": self.rangeIndex!,
                                     "location": self.location!,
                                "startLocation": self.startLocation!]
    self.transaction?.append(transaction)
}