一尘不染

在Swift中创建与Objective-C等效的Getter和Setter

swift

在Swift中,以下Objective-C代码等效于什么?

@property (nonatomic, assign, getter = isOpen) BOOL open;

具体来说,如何在Swift中声明一个变量以使用自定义名称来合成getter?

此外,您随后如何覆盖getter和setter的实现?


阅读 223

收藏
2020-07-07

共1个答案

一尘不染

您的假设很接近,但是有些事情可以更改。我将尽力帮助您尽可能接近Objective-C版本。

首先,nonatomicassign无关紧要。那让我们

@property (getter = isOpen) BOOL open;

由于swift中的属性只是实例变量,因此swift转换如下。

var open:Bool

尽管它具有与Objective-
C版本相同的基本功能,但缺少命名的getter(isOpen)。不幸的是,目前尚无直接翻译可迅速解决。您可以使用自定义的getter和setter。

var open:Bool {
    get {
        // custom getter
    }
    set {
        // custom setter
    }
}

一个相当粗略的解决方法是制作 一个 字面上称为“ isOpengetter”的函数。

func isOpen() -> Bool { return self.open }

总而言之,您所要求的只是一点点可能,但是希望在以后的swift版本中可以成为现实。

2020-07-07