不能指定类型的值' [(字符串,字符串)]'输入' [string:string]'

时间:2016-04-10 15:52:55

标签: ios swift dictionary

我已经宣布了这本词典:

var arrayFrasi:[String:String] = [:]

然后在viewDidLoad中我从我的数据库中检索数据,然后使用以下代码对字典进行排序:

let df = NSDateFormatter()
        df.dateFormat = "dd-MM-yyyy"

        let myArrayOfTuples = self.arrayFrasi.sort{ df.dateFromString($0.0)!.compare(df.dateFromString($1.0)!) == .OrderedAscending}

但是当我这样做时,我需要使用初始字典( arrayFrasi)

self.arrayFrasi = myArrayOfTuples

我发现了这个错误:

  

无法指定类型' [(字符串,字符串)]'的值输入' [string:string]'

我无法弄清楚原因。非常感谢你!

2 个答案:

答案 0 :(得分:5)

这很有道理。字典没有已定义的顺序,因此sort会返回一个元组数组。

  

Swift的Dictionary类型没有定义的顺序。迭代   按照特定顺序的字典的键或值,使用   对其键或值属性的sort()方法。

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/CollectionTypes.html

答案 1 :(得分:0)

您需要将其映射回相同的类型

var arrayFrasi: [String: String] = [ "24-01-1991" : "VALUE" , "22-01-1991" : "VALUE" ]
let df = NSDateFormatter()
df.dateFormat = "dd-MM-yyyy"

let myArrayOfTuples = arrayFrasi.sort{ df.dateFromString($0.0)!.compare(df.dateFromString($1.0)!) == .OrderedAscending}.map { [$0.0 : $0.1] }.flatMap { $0 }
    .reduce([String:String]()) { (dict, tuple) in
        var dict = dict
        dict.updateValue(tuple.1, forKey: tuple.0)
        return dict
}

arrayFrasi = myArrayOfTuples // ["22-01-1991": "VALUE", "24-01-1991": "VALUE"]

希望它有助于