如何在 Swift class 中嵌入静态结构?
How to embed a static struct in a Swift class?
我需要观察一个 Unicorn class(继承自 NSObject),但出于业务原因,我无法使用适当的反应式框架来获得可观察的属性。
我必须退回到 KVO(上帝保佑我)。
为了让事情不 "stringly-typed",我有一个想法,引入一个名为 observableKeyPaths 的静态 属性,它会为 Unicorn class 提供实际上是 KVO 可观察的所有 keyPaths ...使用点符号。
让我们举个例子。 Unicorn class 有一个 属性 status
可以 KVOed。
然后当我设置我的观察者时,我想像这样引用键路径:
unicornInstance.addObserver(self, forKeyPath: Unicorn.observableKeyPaths.status ...etc..)
我可以想出这样的结构:
struct UnicornObservableKeyPaths {
static let status = "status"
}
这个结构很容易被引用:
UnicornObservableKeyPaths.status
但是如何使这个结构成为 class 的一部分?
以下对我不起作用:
class Unicorn {
dynamic private(set) var status: String
static let observableKeyPaths: UnicornObservableKeyPaths = UnicornObservableKeyPaths()
}
有什么想法吗?我在这里错过了什么?
当我引用静态 属性..我可以访问这个
Unicorn.observableKeyPaths
但不是结构的 status
静态成员..为什么?
您不能引用静态变量 属性,因为 UnicornObservableKeyPaths()
是一个实际的 UnicornObservableKeyPaths
而 status
是一个静态变量。
您可以使用
引用结构本身
static let observableKeyPaths = UnicornObservableKeyPaths.self
let _ = Unicorn.observableKeyPaths.status
您可以将结构嵌套在 class
中
class Unicorn : NSObject {
dynamic private(set) var status: String = ""
struct ObservableKeyPaths {
static let status = "status"
}
}
您的观察示例如下所示:
let unicornInstance = Unicorn()
unicornInstance.addObserver(self, forKeyPath: Unicorn.ObservableKeyPaths.status, options: [], context: nil)
我需要观察一个 Unicorn class(继承自 NSObject),但出于业务原因,我无法使用适当的反应式框架来获得可观察的属性。 我必须退回到 KVO(上帝保佑我)。
为了让事情不 "stringly-typed",我有一个想法,引入一个名为 observableKeyPaths 的静态 属性,它会为 Unicorn class 提供实际上是 KVO 可观察的所有 keyPaths ...使用点符号。
让我们举个例子。 Unicorn class 有一个 属性 status
可以 KVOed。
然后当我设置我的观察者时,我想像这样引用键路径:
unicornInstance.addObserver(self, forKeyPath: Unicorn.observableKeyPaths.status ...etc..)
我可以想出这样的结构:
struct UnicornObservableKeyPaths {
static let status = "status"
}
这个结构很容易被引用:
UnicornObservableKeyPaths.status
但是如何使这个结构成为 class 的一部分? 以下对我不起作用:
class Unicorn {
dynamic private(set) var status: String
static let observableKeyPaths: UnicornObservableKeyPaths = UnicornObservableKeyPaths()
}
有什么想法吗?我在这里错过了什么? 当我引用静态 属性..我可以访问这个
Unicorn.observableKeyPaths
但不是结构的 status
静态成员..为什么?
您不能引用静态变量 属性,因为 UnicornObservableKeyPaths()
是一个实际的 UnicornObservableKeyPaths
而 status
是一个静态变量。
您可以使用
引用结构本身static let observableKeyPaths = UnicornObservableKeyPaths.self
let _ = Unicorn.observableKeyPaths.status
您可以将结构嵌套在 class
中class Unicorn : NSObject {
dynamic private(set) var status: String = ""
struct ObservableKeyPaths {
static let status = "status"
}
}
您的观察示例如下所示:
let unicornInstance = Unicorn()
unicornInstance.addObserver(self, forKeyPath: Unicorn.ObservableKeyPaths.status, options: [], context: nil)