Swift - 在getter上返回自身属性并将其自身设置为setter

时间:2016-07-18 16:28:58

标签: swift getter-setter

无论如何要在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
    }
}

如果我在getter上返回self.internetConnectionAvailable

  

链接器命令失败,退出代码为1

当我尝试编译项目时。

我正在尝试这样做,因为我不想创建额外的私有属性来存储get和set。我正在寻找是否有不同的东西来实现这一点。

2 个答案:

答案 0 :(得分:5)

编辑:我注意到您说您不想创建额外的私有财产。对不起不是。除非你将它设为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后,您已经说过您不想要默认处理,这意味着您没有自动支持变量。

答案 1 :(得分:0)

这是没有支持属性的有效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
    }
}

只需指定一个类型,然后从false返回get