Наиболее эффективный способ хранения значения GUID в базе данных SQL Server

Классы являются ссылочными типами, поэтому, как вы заметили, все элементы массива в

var users = [User](count: howManyUsers, repeatedValue:User(thinkTime: 10.0))

ссылаются на один и тот же экземпляр объекта (который создается первым, а затем передается как аргумент инициализатору массива).

Для типа struct вы получите другой результат.

Возможное решение:

var users = (0 ..< howManyUsers).map { _ in User(thinkTime: 10.0) }

Здесь создается экземпляр User для каждого из индексов массива.

Если вам это нужно часто, вы можете определить метод инициализации массива, который принимает параметр «автозакрытия»:

extension Array {
    public init(count: Int, @autoclosure elementCreator: () -> Element) {
        self = (0 ..< count).map { _ in elementCreator() }
    }
}

var users = Array(count: howManyUsers, elementCreator: User(thinkTime: 10.0) )

Теперь второй аргумент User(thinkTime: 10.0) завершается компилятором в закрытие, а закрытие выполняется для каждого индекса массива.


Обновление для Swift 3:

extension Array {
    public init(count: Int, elementCreator: @autoclosure () -> Element) {
        self = (0 ..< count).map { _ in elementCreator() }
    }
}
30
задан gbn 30 December 2011 в 05:49
поделиться