У меня есть словарь с Structs
. Я пытаюсь присвоить значения struct
, когда я прохожу через dictionary
. Свифт говорит мне cannot assign to 'isRunning' in 'blockStatus'
. Я не смог найти что-либо в документах по этой конкретной неизменности dictionaries
или Structs
.
Прямо с детской площадки:
import Cocoa
struct BlockStatus{
var isRunning = false
var timeGapForNextRun = UInt32(0)
var currentInterval = UInt32(0)
}
var statuses = ["block1":BlockStatus(),"block2":BlockStatus()]
for (block, blockStatus) in statuses{
blockStatus.isRunning = true
}
cannot assign to 'isRunning' in 'blockStatus'
blockStatus.isRunning = true
Это работает, если я изменяю struct
на class
.
Я предполагаю, что это имеет какое-то отношение к тому факту, что структуры копируются и классы всегда ссылаются?
РЕДАКТИРОВАТЬ: Итак, даже если он копирует его. Почему я не могу его изменить? Это даст мне неправильный результат, но вы можете изменить членов констант, а не сами константы. Например, вы можете сделать это:
class A {
var b = 5
}
let a = A()
a.b = 6