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来自get
false
。
编辑:我注意到您说过您不想创建额外的私有 属性。那对不起。不,除非你把它做成一个 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
,您就表示您不想要默认处理,这意味着您没有自动支持变量。
反正就是把自己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来自get
false
。
编辑:我注意到您说过您不想创建额外的私有 属性。那对不起。不,除非你把它做成一个 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
,您就表示您不想要默认处理,这意味着您没有自动支持变量。