Swift: Criando uma matriz com um valor padrão de instâncias de objetos distintas
Eu notei um pouco estranho (e IMHO perigoso) comportam-se emCriando uma matriz com um valor padrão. Como afirmado emSwift 2.1: Tipos de coleção
O tipo de matriz do Swift também fornece um inicializador para criar uma matriz de um determinado tamanho com todos os seus valores definidos para o mesmo valor padrão. Você passa a esse inicializador o número de itens a serem adicionados à nova matriz (chamada contagem) e um valor padrão do tipo apropriado (chamado repetidoValor):
O ponto é:mesmo valor padrão; para entender como funciona, tentei criar uma matriz de elementos dessa classe de exemplo
class User {
private struct Shared {
static var sequence: Int = 0
}
var id: Int
var thinkTime: NSTimeInterval // typealias di Double
init (thinkTime: NSTimeInterval) {
User.Shared.sequence = User.Shared.sequence+1
id = User.Shared.sequence
self.thinkTime = thinkTime
}
}
e este código de teste:
let howManyUsers: Int = 3
var users = [User](count: howManyUsers, repeatedValue:User(thinkTime: 10.0))
let u2: User = User(thinkTime: 10)
let u3: User = User(thinkTime: 10)
users.append(u2)
users.append(u3)
users[1].thinkTime = 20
users[3].thinkTime = 30
for u in users {
print("User id:\(u.id) thinktime:\(u.thinkTime)")
}
dá:
User id:1 thinktime:20.0
User id:1 thinktime:20.0
User id:1 thinktime:20.0
User id:2 thinktime:30.0
User id:3 thinktime:10.0
que comprovam definitivamente o inicializador com o número de itens a serem adicionados à nova matriz e um valor padrão do tipo apropriado são:a mesma instância do objeto
Qual é o caminho, o mais conciso e inteligente possível, para obter uma variedade deinstâncias de objetos distintos , instanciado com o mesmo valor padrão (não a mesma instância, mas várias instâncias inicializadas com o mesmo valor padrão)?