I have a following code
struct Cat{
var itter = 0
}
class CatStorage{
var items = Array<Cat>()
{
didSet{
print(items)
}
}
}
var store = CatStorage()
store.items.append(Cat())
for var cat in store.items {
cat.itter += 1 // won't trigger didSet of CatStorage
}
store.items[0].itter += 1 // will trigger didSet of CatStorage
And I can't figure out, why
for var cat in store.items {
cat.itter += 1 // won't trigger didSet of CatStorage
}
doesn't trigger didSet
of CatStorage
class? I guess it's because of the fact that Cat
is a struct and struct is a value type in Swift, but at the same time I'm iterating over values inside a class, which is a reference type, so that's why I can't figure out why does it works this way. And I'm became more puzzled, when I saw that
store.items[0].itter += 1 // will trigger didSet of CatStorage
actually triggers didSet
of CatStorage
class. Can you please help me to understand why does it works that way? And how can I iterate over items
inside CatStorage
so that didSet
called on change?