第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Swift:使用不同對象實例的默認(rèn)值創(chuàng)建一個數(shù)組

Swift:使用不同對象實例的默認(rèn)值創(chuàng)建一個數(shù)組

一只甜甜圈 2019-11-19 14:47:05
在創(chuàng)建具有默認(rèn)值的數(shù)組時,我注意到了一些怪異(和危險的恕我直言)的行為。如Swift 2.1中所述:集合類型Swift的Array類型還提供了一個初始化程序,用于創(chuàng)建一個特定大小的數(shù)組,并將其所有值設(shè)置為相同的默認(rèn)值。您向此初始化程序傳遞要添加到新數(shù)組中的項目數(shù)(稱為count)和適當(dāng)類型的默認(rèn)值(稱為repeatedValue):關(guān)鍵是:相同的默認(rèn)值;為了了解它是如何工作的,我嘗試創(chuàng)建此示例類的元素數(shù)組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  }}和此測試代碼:let  howManyUsers: Int = 3var 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 = 20users[3].thinkTime = 30for u in users {  print("User id:\(u.id) thinktime:\(u.thinkTime)")}給出:User id:1 thinktime:20.0     User id:1 thinktime:20.0User id:1 thinktime:20.0User id:2 thinktime:30.0User id:3 thinktime:10.0使用要添加到新數(shù)組中的項數(shù)以及適當(dāng)類型的默認(rèn)值來明確證明初始化程序是:相同的對象實例哪種方法盡可能簡潔明了,以獲取具有相同默認(rèn)值(不是相同的實例,而是用相同的默認(rèn)值初始化的多個實例)而實例化的不同對象實例的數(shù)組?
查看完整描述

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() }

    }

}


查看完整回答
反對 回復(fù) 2019-11-19
?
德瑪西亞99

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)


查看完整回答
反對 回復(fù) 2019-11-19
  • 2 回答
  • 0 關(guān)注
  • 861 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號