// A write access to the memory where one is stored.
var one = 1
// A read access from the memory where one is stored.
print("We're number \(one)!")
func oneMore(than number: Int) -> Int {
return number + 1
}
var myNumber = 1
myNumber = oneMore(than: myNumber)
print(myNumber)
// Prints "2"
var stepSize = 1
func increment(_ number: inout Int) {
number += stepSize
}
increment(&stepSize)
// Error: conflicting accesses to stepSize
// Buat salinan secara eksplisit.
var copyOfStepSize = stepSize
increment(©OfStepSize)
// Perbarui variabel yang asli.
stepSize = copyOfStepSize
// stepSize sekarang bernilai 2
func balance(_ x: inout Int, _ y: inout Int) {
let sum = x + y
x = sum / 2
y = sum - x
}
var playerOneScore = 42
var playerTwoScore = 30
balance(&playerOneScore, &playerTwoScore) // OK
balance(&playerOneScore, &playerOneScore)
// Error: conflicting accesses to playerOneScore
struct Player {
var name: String
var health: Int
var energy: Int
static let maxHealth = 10
mutating func restoreHealth() {
health = Player.maxHealth
}
}
extension Player {
mutating func shareHealth(with teammate: inout Player) {
balance(&teammate.health, &health)
}
}
var gilang = Player(name: "Gilang", health: 10, energy: 10)
var ramadhan = Player(name: "Ramadhan", health: 5, energy: 10)
gilang.shareHealth(with: &ramadhan) // OK
gilang.shareHealth(with: &gilang)
// Error: conflicting accesses to gilang
var playerInformation = (health: 10, energy: 20)
balance(&playerInformation.health, &playerInformation.energy)
// Error: conflicting access to properties of playerInformation
var yourName = Player(name: "Nama kamu", health: 10, energy: 10)
balance(&yourName.health, &yourName.energy) // Error
func someFunction() {
var gilang = Player(name: "Gilang", health: 10, energy: 10)
balance(&gilang.health, &gilang.energy) // OK
}