Swift 4与initWithObject等效

时间:2017-06-17 18:18:28

标签: objective-c swift nsmutablearray

Swift的新手。我有一段Objective-C代码,如下所示:

self.imageArray = [[NSMutableArray alloc] initWithObjects:@{@"name":@"James",@"image":@"1.jpg",@"Address":@"xyz"},
                  @{@"name":@"Doe",@"image":@"2.jpg",@"Address":@"xyz"},nil];

如何在Swift中使用相同的initWithObjects函数。我在线阅读了我们需要创建extension然后使用zip函数。但是从文档看来,zip函数只需要2个序列。我的imageArray包含由3个不同的键/值组成的字典对象。

我尝试了以下操作,但不确定如何将值分配给相应的键:

  extension Dictionary{

        for (name, address, image) in zip(names, address, images) {
        self[name] = names
        }
    }

1 个答案:

答案 0 :(得分:1)

在Swift中,我们可能会使用原生Array(使用[]指定)而不是NSMutableArray对象。与您的代码段相同的Swift将使用Swift Array Dictionary个对象:

var imageArray: [[String: String]]?

然后:

imageArray = [["name": "James", "image": "1.jpg", "Address": "xyz"],
              ["name": "Doe",   "image": "2.jpg", "Address": "xyz"]]

话虽如此,您可能想要使用自定义对象类型:

struct PersonImage {
    let name: String
    let image: String
    let address: String
}

然后将imageArray定义为PersonImage

的数组
var imageArray: [PersonImage]?

然后

imageArray = [PersonImage(name: "James", image: "1.jpg", address: "xyz"),
              PersonImage(name: "Doe",   image: "2.jpg", address: "xyz")]