将字典数组中的字符串转换为 NSDate

Converting String into NSDate in array of dictionaries

我正在用 API 做一些请求 returns 给我下面的示例 :

[{
id = 1004;
"planning_id" = 7;
"started_on" = "2015-05-14";}, 
{
id = 1380;
"planning_id" = 8;
"started_on" = "2015-05-16";}, 
{
id = 1382;
"planning_id" = 8;
"started_on" = "2015-05-18"; }]

如您所见,日期值作为字符串返回,目前被视为 AnyObject...

我现在正尝试为数组的所有字典更改它,以便我可以将 started_on 值用作 NSDate

这是我的代码:

        for i in 1..<myArray.count
    {

        let dateString = shiftsArray[i-1].objectForKey("started_on") as! String

        //format date
        var dateFormatter = NSDateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd"
        var dateFromString = dateFormatter.dateFromString(dateString)

        shiftsArray[i-1].objectForKey("started_on") = dateFromString
    }

但是,我无法 运行 代码,因为最后一行有错误:"Cannot assign a value of type 'NSDate?' to a value of type "AnyObject?"。

问题是我不知道如何更改字典 'started_on' 的值类型。

提前谢谢你,

我不知道你在这个小片段之前是如何设置的,但我是这样做的:

var arr:[[String:AnyObject]] = [["id":1, "planning_id":2, "started_on":"2015-05-13"], ["id":1, "planning_id":2, "started_on":"2015-05-14"], ["id":1, "planning_id":2, "started_on":"2015-05-10"]]

for (i, dict) in enumerate(arr) {
    let dateString = dict["started_on"] as! String

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

    let date = formatter.dateFromString(dateString)

    arr[i]["started_on"] = date
}

// You mentioned that you want to sort it based on date:
arr.sort { obj1, obj2 -> Bool in
    let date1 = obj1["started_on"] as! NSDate
    let date2 = obj2["started_on"] as! NSDate

    return date1.compare(date2) == NSComparisonResult.OrderedAscending
}

之前:

var myArray = [
    [
        "id" : 1004,
        "planning_id" : 7,
        "started_on" : "2015-05-14"
    ],
    [
        "id" : 1380,
        "planning_id" : 8,
        "started_on" : "2015-05-16"
    ],
    [
        "id" : 1382,
        "planning_id" : 8,
        "started_on" : "2015-05-18"
    ]
]

之后:

[{
    id = 1004;
    "planning_id" = 7;
    "started_on" = "2015-05-14 07:00:00 +0000";
}, {
    id = 1380;
    "planning_id" = 8;
    "started_on" = "2015-05-16 07:00:00 +0000";
}, {
    id = 1382;
    "planning_id" = 8;
    "started_on" = "2015-05-18 07:00:00 +0000";
}]

如果您想就地完成,可以使用此代码:

请参阅下面我的编辑。

我个人希望将更改复制到一个新数组中,在这种情况下您可以使用地图:

let newArray = myArray.map { (var obj) -> AnyObject in
    if let dateString = obj["started_on"] as? String {
        //format date
        let dateFormatter = NSDateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd"
        let dateFromString = dateFormatter.dateFromString(dateString)
        obj["started_on"] = dateFromString
        return obj
    }
    return elem
}

编辑

根据您的评论,这里有一个更改日期的示例:

    var myArray: [[String:NSObject]] = [
        [
            "id" : 1004,
            "planning_id" : 7,
            "started_on" : "2015-05-14"
        ],
        [
            "id" : 1380,
            "planning_id" : 8,
            "started_on" : "2015-05-16"
        ],
        [
            "id" : 1382,
            "planning_id" : 8,
            "started_on" : "2015-05-18"
        ]
    ]

for (index, var elem) in myArray.enumerate() {
    if let dateString = elem["started_on"] as? String {
        //format date
        let dateFormatter = NSDateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd"
        let dateFromString = dateFormatter.dateFromString(dateString)
        elem["started_on"] = dateFromString
        myArray[index] = elem
    }
}

访问更改后的数组:

// Returns value in an NSDate 
let nsdate = myArray[0]["started_on"]! // It's an optional!