gpt4 book ai didi

ios - swift:监听 "struct variable"-change 事件?

转载 作者:行者123 更新时间:2023-11-28 07:55:33 28 4
gpt4 key购买 nike

我遇到了一个小问题:

How is it possible to listen for the change of a struct-instance variable declared in another ("uneditable!!") class?


我添加了一些小代码片段来澄清我的想法。

说明:

  • FixedClass是一个不可编辑的类:我不想更改/我无法更改“FixedClass”的任何代码

  • EditableClass可以编辑 - 我相信你会通过查看代码得到它 (^_^)/


代码:

let fixedClass: FixedClass = FixedClass()
class FixedClass {
struct MyObject {
var abc = 0
}
var instance = MyObject()
public init() { Timer.scheduledTimer(timeInterval: 0.4, target: self, selector: #selector(self.updateVar), userInfo: nil, repeats: true) }

@objc func updateVar() {
instance.abc+=1
}
func getVar() -> Int {
return instance.abc
}
}


let editableClass: EditableClass = EditableClass()
class EditableClass {
public init() { }
func listenForChange() {
// listen for change event of FixedClass.getVar()
print("Variable: \(fixedClass.getVar())")
}
}


调用方式:editableClass.listenForChange()


总而言之,我想听听 FixedClass.getVar() 的变化。结果 - 最好避免使用 loopstimers .然而,最重要的是至少让它发挥作用。

非常感谢任何帮助,谢谢!

最佳答案

这将完全取决于“真正的”FixedClass 是如何定义的。 IE。是不是NSObject的子类,是不是ObjectiveC的类,你要观察的属性是怎么定义的。

就您的实际示例而言,您可以通过这样的子类化来实现:

var newFixedClass: NewFixedClass = NewFixedClass()
var editableClass: EditableClass = EditableClass()

protocol NewFixedClassProtocol: class {
func changed(newFixedClass: NewFixedClass)
}

class NewFixedClass: FixedClass {
public weak var delegate: NewFixedClassProtocol?

override var instance: FixedClass.MyObject {
didSet {
self.delegate?.changed(newFixedClass: self)
}
}
}

class EditableClass: NewFixedClassProtocol {
public init() {
newFixedClass.delegate = self
}

func changed(newFixedClass: NewFixedClass) {
print ("Value = \(newFixedClass.instance.abc)")
}
}

所以你基本上创建了一个执行观察的类支持的协议(protocol),创建一个 FixedClass 的子类,它有一个协议(protocol)类型的委托(delegate),并覆盖你想用 didSet 观察者观察的 FixedClass 的属性,然后调用委托(delegate)方法。在某些时候,您必须将观察类分配为子类的委托(delegate)(我在 init 方法中作为测试这样做)。

这样做我可以观察到结构何时发生变化,但我没有触及 FixedClass。

但请注意,此方法在很大程度上依赖于对原始 FixedClass 的了解,因此可能不适用于您的“真实世界”案例。

(顺便说一句,我无法让它与全局定义的类实例一起使用,不得不将它们设置在我的初始 View Controller 中,但这可能与我的测试方式有关,并且不会改变涉及的方法)

关于ios - swift:监听 "struct variable"-change 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48173005/

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