Swift - return 在 getter 上 属性 并在 setter 上设置自己

Swift - return itself property on getter and set itself on setter

反正就是把自己return放在属性里getter,把自己放在setter上?因为我只想在 getter 和 setter 中打印日志,仅此而已。

例如我尝试做这样的事情:

private(set) var internetConnectionAvailable: Bool {
    get {
        logger.debug("verifying internet connection")
        // here return itself property
    }
    set {
        logger.debug("changing internet connection")
        // here set itself
    }
}

如果我 return self.internetConnectionAvailable 在 getter 我得到:

Linker command failed with exit code 1

当我尝试编译项目时。

我正在尝试这样做,因为我不想创建一个额外的私有 属性 来存储 get 和 set。我正在寻找是否有不同的方法可以实现这一目标。

这是有效的 Swift 没有支持 属性:

private(set) var internetConnectionAvailable: Bool {
    get {
        print("verifying internet connection")
        // here return itself property
        return false
    }
    set {
        print("changing internet connection")
        // here set itself
    }
}

只需要指定一个类型,并且return来自getfalse

编辑:我注意到您说过您不想创建额外的私有 属性。那对不起。不,除非你把它做成一个 NSManagedObject 子类(并连接到 willAccessValueForKey 系统),或者以其他方式连接到 NSObject 上的 ObjC 运行时(你可以调配你自己的 getter 例如添加日志;别笑,我以前做过)。但是所有这些方法在 Swift 中都是疯狂的(在 ObjC 中也是疯狂的;我只将它们用于调试)。只需创建支持变量即可。

如果您只想记录 setter,那么这将很简单:使用 willSet 而不是 set。但是记录 getter 需要手动实现它。您可以使用私有支持变量来做到这一点。

private var _internetConnectionAvailable: Bool
private(set) var internetConnectionAvailable: {
    get {
        logger.debug("verifying internet connection")
        return _internetConnectionAvailable
    }
    set {
        logger.debug("changing internet connection")
        _internetConnectionAvailable = newValue
    }
}

一旦您自己定义 get,您就表示您不想要默认处理,这意味着您没有自动支持变量。