gpt4 book ai didi

swift - 如何在 Swift 类中嵌入静态结构?

转载 作者:行者123 更新时间:2023-11-30 13:10:37 25 4
gpt4 key购买 nike

我需要观察一个 Unicorn 类(继承自 NSObject),但出于业务原因,我无法使用适当的响应式(Reactive)框架来具有可观察的属性。我必须回退到 KVO(上帝帮助我)。

为了使事情不是“字符串类型”,我有一个想法,引入一个名为 observableKeyPaths 的静态属性,它将为 Unicorn 类提供实际上 KVO 可观察的所有 keyPath...使用点表示法。

让我们举个例子。 Unicorn 类有一个可以进行 KVO 操作的属性 status。然后,当我设置观察者时,我想像这样引用键路径:

   unicornInstance.addObserver(self, forKeyPath: Unicorn.observableKeyPaths.status   ...etc..)

我可以想出这样的结构:

struct UnicornObservableKeyPaths {

static let status = "status"
}

可以轻松引用该结构:

UnicornObservableKeyPaths.status

但是我如何使这个结构成为类的一部分呢?以下内容对我不起作用:

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 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)

关于swift - 如何在 Swift 类中嵌入静态结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38771361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com