Swift: how to change a property's value without calling its didSet function

后端 未结 4 483
谎友^
谎友^ 2021-01-01 12:41

How can you set a property\'s value in Swift, without calling its didSet() function outside of an initialization context? The code below was a failed experimen

4条回答
  •  渐次进展
    2021-01-01 13:12

    What you do in Objective-C to "avoid side effects" is accessing the backing store of the property - its instance variable, which is prefixed with underscore by default (you can change this using the @synthesize directive).

    However, it looks like Swift language designers took specific care to make it impossible to access the backing variables for properties: according to the book,

    If you have experience with Objective-C, you may know that it provides two ways to store values and references as part of a class instance. In addition to properties, you can use instance variables as a backing store for the values stored in a property.

    Swift unifies these concepts into a single property declaration. A Swift property does not have a corresponding instance variable, and the backing store for a property is not accessed directly. (emphasis is mine)

    Of course this applies only to using the "regular language" means, as opposed to using reflection: it might provide a way around this restriction, at the expense of readability.

提交回复
热议问题