properties - 未调用 Swift 中的访问器方法

标签 properties swift accessor

在 Objective-C 中,我可以对属性执行以下操作:

@property (nonatomic, strong) Person *currentPerson;

然后 intellisense 会显示我可以添加以下方法:

- (void)setCurrentPerson:(Person *)currentPerson {
    ...
}

设置该属性方法后,将调用该方法。

在 Swift 中是否有等效的方法来触发 setter 方法?我注意到没有智能感知,并且在 Swift 中添加相同的方法永远不会被调用。

func setCurrentPerson(currentPerson: Person) {} // never called

最佳答案

您可以通过使用嵌入到计算属性中的伪私有(private)属性来实现相同的结果,如下所示:

class Test {
    var _data: String = ""

    var data: String {
        get { return self._data}
        set { self._data = newValue }
    }
}

_data 属性仍然可以公开访问(swift 中没有private/protected/private 访问修饰符yet) - 这就是为什么我在它前面加上下划线的原因,以提醒我这是一个伪私有(private)属性。

通过 data 计算属性,您可以使用 getter 和 setter 来覆盖标准行为。

此方法是模仿 objective-c 中的属性的变通方法。 willSetdidSet 属性观察器仍然可以按照@gotnull 在他的回答中概述的那样使用。

关于properties - 未调用 Swift 中的访问器方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24665754/

相关文章:

swift - 将变量从一个 swift 文件传递​​到另一个文件

javascript - 通过 Javascript 中的 keyPath 访问属性?

javascript - ecmascript 5 或 6 中未定义键和空键的行为

java - Main 如何访问类?

ios - iOS 中@property 的默认值是什么?

java - 使用spring读取属性表单文件

ios - 所有 View Controller 的多维数组

JavaFX Beans 绑定(bind)突然停止工作

java - 继承我的自定义 .properties 文件中的 user.home 属性

ios - UITableView 单元格图像在滚动时不断切换单元格