Value Semantics
Struct Copy
Assigning a struct value makes an independent copy.
Change one copy
struct_copy.swift
Replay: real traced execution (multi-file project)
struct Player {
var name: String
var score: Int
}
let newScore = 12
let original = Player(name: "Ari", score: 10)
var copy = original
copy.score = newScore
let message = "\(original.score)->\(copy.score)"
print(message)
struct Player {
var name: String
var score: Int
}
let newScore = 7
let original = Player(name: "Ari", score: 10)
var copy = original
copy.score = newScore
let message = "\(original.score)->\(copy.score)"
print(message)
struct Player {
var name: String
var score: Int
}
let newScore = 18
let original = Player(name: "Ari", score: 10)
var copy = original
copy.score = newScore
let message = "\(original.score)->\(copy.score)"
print(message)
newScore ← 12, original ← Player(name: "Ari", score: 10), copy ← Player(name: "Ari", score: 10)
6let newScore→ 12 = 12 //@newScore=7, 187let original→ Player(name: "Ari", score: 10) = Player(name: "Ari", score: 10)8var copy→ Player(name: "Ari", score: 10) = originalPlayer(name: "Ari", score: 10)9copy.score→ 12 = newScore1210let message→ 10->12 = "\(original.score10)->\(copy.score12)"1112print(message10->12)output10->12
newScore ← 7, original ← Player(name: "Ari", score: 10), copy ← Player(name: "Ari", score: 10)
6let newScore→ 7 = 77let original→ Player(name: "Ari", score: 10) = Player(name: "Ari", score: 10)8var copy→ Player(name: "Ari", score: 10) = originalPlayer(name: "Ari", score: 10)9copy.score→ 7 = newScore710let message→ 10->7 = "\(original.score10)->\(copy.score7)"1112print(message10->7)output10->7
newScore ← 18, original ← Player(name: "Ari", score: 10), copy ← Player(name: "Ari", score: 10)
6let newScore→ 18 = 187let original→ Player(name: "Ari", score: 10) = Player(name: "Ari", score: 10)8var copy→ Player(name: "Ari", score: 10) = originalPlayer(name: "Ari", score: 10)9copy.score→ 18 = newScore1810let message→ 10->18 = "\(original.score10)->\(copy.score18)"1112print(message10->18)output10->18
value semantics
A struct assignment copies stored values, so changing one variable leaves the other variable unchanged.