SwiftData Model with `updated` variable leads to wrong value being persisted.

Hi! I am seeing some unexpected behavior when attempting to create a Model instance with a variable named updated. I start with a simple Model:

@Model final public class Item {
  var timestamp: Int
  var updated: Int
  
  public init(timestamp: Int = 1, updated: Int = 1) {
    self.timestamp = timestamp
    self.updated = updated
  }
}

I then attempt to create an item instance:

func main() throws {
  let schema = Schema([Item.self])
  let configuration = ModelConfiguration(isStoredInMemoryOnly: true)
  let container = try ModelContainer(
    for: schema,
    configurations: configuration
  )
  let modelContext = ModelContext(container)
  let item = Item()
  print(item.timestamp)
  print(item.updated)
}

try main()

The value of item.timestamp is printing as 1 and the value of item.updated is printing as 0.

I have no idea what could be causing that to happen… why would both those values not be printing as 1? Is there some private API that is somehow colliding with the (public) updated variable and causing the item instance to report back with a value of 0? Is there documentation warning engineers that a variable named updated is off-limits and results in undefined behavior?

I can fix that by renaming the variable:

@Model final public class Item {
  var timestamp: Int
  var updatedTimestamp: Int
  
  public init() {
    self.timestamp = 1
    self.updatedTimestamp = 1
  }
}

I am unblocked on this (because renaming the variable seems to work fine)… but is there any insight on why this might be happening in the first place? I am building from Xcode_16_beta_5. Thanks!

I ran into the same issue today, and came to the same conclusion you did. Unfortunately, there seems to be an undocumented implementation detail of SwiftData that interferes with a model property named updated.

SwiftData Model with `updated` variable leads to wrong value being persisted.
 
 
Q