2 回答

TA貢獻(xiàn)1842條經(jīng)驗 獲得超22個贊
類是引用類型,因此-正如您所注意到的-中的所有數(shù)組元素
var users = [User](count: howManyUsers, repeatedValue:User(thinkTime: 10.0))
引用相同的對象實例(首先創(chuàng)建該實例,然后將其作為參數(shù)傳遞給數(shù)組初始化器)。
對于struct類型,您將得到不同的結(jié)果。
可能的解決方案:
var users = (0 ..< howManyUsers).map { _ in User(thinkTime: 10.0) }
在這里,User為每個數(shù)組索引創(chuàng)建一個實例。
如果您經(jīng)常需要,則可以定義一個帶有“ autoclosure”參數(shù)的數(shù)組初始化方法:
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) )
現(xiàn)在,第二個參數(shù)User(thinkTime: 10.0)由編譯器包裝到一個閉包中,并對每個數(shù)組索引執(zhí)行閉包。
Swift 3更新:
extension Array {
public init(count: Int, elementCreator: @autoclosure () -> Element) {
self = (0 ..< count).map { _ in elementCreator() }
}
}

TA貢獻(xiàn)1770條經(jīng)驗 獲得超3個贊
迅捷5
extension MSRoom {
static var dummyDefaultRoom: MSRoom = {
let members = MSRoom.Member.dummyMembers(maxCount: 6)
let ownerUser = members.first!.user
var room = MSRoom(id: "98236482724", info: .init(name: "Ahmed's Room", description: "your default room", isPrivate: true), owner: ownerUser)
room.dateCreated = Date(timeIntervalSince1970: 1565222400)
room.currentMembers = members
return room
}()
}
let rooms = [MSRoom](repeating: MSRoom.dummyDefaultRoom, count: 10)
- 2 回答
- 0 關(guān)注
- 861 瀏覽
添加回答
舉報