创建并遍历一组字典数组

时间:2016-10-09 01:14:13

标签: arrays swift

我已经成功创建了一个字典数组,我认为这是我问题的最终解决方案(这里:Store CLLocation Manager Values in Device swift),这是我提出的代码:

func arrayOfDictionaries() {
    var offline:[[String:AnyObject]] = []
    offline.append(["LATITUDE: ": userLocation.coordinate.latitude, "LONGITUDE: ": userLocation.coordinate.longitude, "SPEED: ": userLocation.speed])

    NSUserDefaults().setObject(offline, forKey: "offLine")

    if let offLinePositions = NSUserDefaults().arrayForKey("offLine") as? [[String:AnyObject]] {
        //print(offLinePositions)


        for item in offLinePositions {
            print(item["LATITUDE: "]! as! NSNumber)  // A, B
            print(item["LONGITUDE: "]! as! NSNumber)  // 19.99, 4.99
            print(item["SPEED: "]! as! NSNumber)  // 1, 2
        }
    }

}

但是当我测试应用程序时,我意识到我只有1个位置存储在数组中。所以我的想法是创建另一个数组并插入第一个数组中的值。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

您正在创建offline数组,向其添加一个项目,然后使用此项覆盖用户默认值中的offLine数组。这就是为什么你只有一个项目。

首先,您需要尝试从用户默认值中获取现有数组,然后将另一项添加到其中并将其写回用户默认值:

func arrayOfDictionaries() {
    let defaults = NSUserDefaults.standardUserDefaults()
    var offline:[[String:AnyObject]]
    if defaults.arrayForKey("offLine") != nil {
        //Grab offLine array from user defaults
        offline = defaults.arrayForKey("offLine") as! [[String:AnyObject]]
    } else {
        //Setting the offLine array for the first time
        offline = []
    }
    offline.append(["LATITUDE: ": userLocation.coordinate.latitude, "LONGITUDE: ": userLocation.coordinate.longitude, "SPEED: ": userLocation.speed])

    defaults.setObject(offline, forKey: "offLine")

    if let offLinePositions = NSUserDefaults().arrayForKey("offLine") as? [[String:AnyObject]] {
        //print(offLinePositions)


        for item in offLinePositions {
            print(item["LATITUDE: "]! as! NSNumber)  // A, B
            print(item["LONGITUDE: "]! as! NSNumber)  // 19.99, 4.99
            print(item["SPEED: "]! as! NSNumber)  // 1, 2
        }
    }

}