如何将一个对象多次追加到数组中?

16

我希望将所有对象追加在一行中。 我有一些像这样的对象:

let abaddon = Hero(name: "abaddon")
let ember = Hero(name: "ember")
let gondar = Hero(name: "gondar")
let kael = Hero(name: "kael")
let kunkka = Hero(name: "kunkka")
let layana = Hero(name: "layana")
let lucifer = Hero(name: "lucifer")
let omni = Hero(name: "omni")
let soul = Hero(name: "soul")
let wind = Hero(name: "wind")

英雄对象如下:

class Hero {

    var name: String!
    var image: UIImage? {
        return UIImage(named: "\(name)")!
    }

    required init(name: String) {
        self.name = name
    }
}

我想将它们放入这个数组中:var heroes = [Hero]()

但我发现append每次只能添加一个对象。

heroes.append(abaddon)

如何在单行中追加多个对象,类似于以下内容:

heroes.append([abaddon, ember, gondar])

非常感谢,任何帮助都将不胜感激。

4个回答

27

如果你想添加多个对象,你可以将它们包装成一个数组并使用appendContentsOf。

heroes.append(contentsOf:[abaddon, ember, gondor])

7
我尝试这样做:
let heroes = ["abaddon","ember","gondar",etc].map { Hero(name: $0) } 

因此,我不需要声明所有的对象。

这很聪明。你首先声明了名字的数组,然后创建一个包含列表中每个名字的新Hero实例的数组。 - Nicolas Miari
如果初始化程序需要的参数不止一个,那么代码会变得非常混乱。 - BallpointBen
是的,如果Hero对象有更多属性,这个解决方案就不再方便了。 - Twitter khuong291

2

Swift 4.x的@TPlet的答案

nameField.append(contentsOf: [abaddon, ember, gondor])

1
为什么不只是这样?
var heroes = [abaddon, ember, ..., wind]

因为他需要类型为“Hero”的对象,这些对象很可能包含除“name”之外的其他属性/状态;而字符串数组是不够的。 - Nicolas Miari
它们不是字符串(没有引号),它们是实际的变量名。 - BallpointBen
我的错,没注意到。 - Nicolas Miari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接