组合Swift结构中的复制行为

组合Swift结构中的复制行为,swift,Swift,我的顶层结构中有一个计算属性,boss通过id返回一个成员。当我想更新一些叶成员的属性时,编译器抱怨它需要一个setter。因此,我为它添加了一个members[bossId]=newValuesetter。似乎在值发生变化时,它将分配一个新的更新的成员来替换原始的成员,因为它是结构,而不是类 它是否会导致structboss:Member的整个副本,即使我只需要更新成员的一个int属性 我应该担心这个多余的副本吗?或者编译器足够聪明,可以将影响降至最低 // definition: Compa

我的顶层结构中有一个计算属性,
boss
通过
id
返回一个成员。当我想更新一些叶成员的属性时,编译器抱怨它需要一个setter。因此,我为它添加了一个
members[bossId]=newValue
setter。似乎在值发生变化时,它将分配一个新的更新的
成员
来替换原始的
成员
,因为它是
结构
,而不是

它是否会导致struct
boss: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?