组合Swift结构中的复制行为
我的顶层结构中有一个计算属性,组合Swift结构中的复制行为,swift,Swift,我的顶层结构中有一个计算属性,boss通过id返回一个成员。当我想更新一些叶成员的属性时,编译器抱怨它需要一个setter。因此,我为它添加了一个members[bossId]=newValuesetter。似乎在值发生变化时,它将分配一个新的更新的成员来替换原始的成员,因为它是结构,而不是类 它是否会导致structboss:Member的整个副本,即使我只需要更新成员的一个int属性 我应该担心这个多余的副本吗?或者编译器足够聪明,可以将影响降至最低 // definition: Compa
boss
通过id
返回一个成员。当我想更新一些叶成员的属性时,编译器抱怨它需要一个setter。因此,我为它添加了一个members[bossId]=newValue
setter。似乎在值发生变化时,它将分配一个新的更新的成员
来替换原始的成员
,因为它是结构
,而不是类
它是否会导致structboss:Member
的整个副本,即使我只需要更新成员的一个int
属性
我应该担心这个多余的副本吗?或者编译器足够聪明,可以将影响降至最低
// definition: Company: { Member { [Activity { times: Int }] }
struct Company {
var bossId: Int = 0
var members: [Int: Member] = [:]
var boss: Member? {
get { return members[bossId] }
set { members[bossId] = newValue }
}
}
struct Member {
var name: String
var activities: [Activity]
}
struct Activity {
var type: String
var times: Int
}
// init
var company = Company()
company.members[0] = Member(name: "John",activities: [Activity(type: "Walk", times: 0)])
company.members[1] = Member(name: "Sean", activities: [Activity(type: "Run", times: 0)])
//使用
company.boss?活动[0]。次数=1
company.boss?活动[0].次数=2
company.boss?.activities[0].times=3//Off-topic但为什么id是字典中的键而不是成员的属性?@JoakimDanielson这只是一个很小的例子,在我的项目中id也是成员的属性。
// use
company.boss?.activities[0].times = 1
company.boss?.activities[0].times = 2
company.boss?.activities[0].times = 3 // <- Does it cause 3 times whole `Member` copy?