我的目标:
//Object to observe
struct Text {
let savedUserHeader: String
let savedUserText: String
}
ClassA
创建对象的位置://First Class
class A {
func somefunc(){
let a = Text(savedUserHeader: "testHeader", savedUserText: "testText")
}
}
在
classB
中,我想观察是否创建了新对象://Second Class
class B {
var text: Text? {
didSet{
headerlabel.text = text.savedUserHeader
saveUserLabel.text = text?.savedUserText
}
}
}
最佳答案
代表
您可以使用委托模式来观察,让我们创建一个名为ADelegate
的协议:
protocol ADelegate {
func didCreateText(text: Text)
}
然后,在类a中添加一个名为
delegate
的变量,并将一个Text
对象传递到didCreateText(text:)
方法中://First Class
class A {
var delegate: ADelegate?
func somefunc(){
let a = Text(savedUserHeader: "testHeader", savedUserText: "testText")
delegate?.didCreateText(text: a)
}
}
接下来,在B中创建对象A时,设置
somefunc()
并实现a.delegate = self
协议://Second Class
class B: ADelegate {
var headerlabel: UILabel!
var saveUserLabel: UILabel!
var a = A()
var text: Text? {
didSet{
headerlabel.text = text?.savedUserHeader
saveUserLabel.text = text?.savedUserText
}
}
init() {
a.delegate = self
}
func didCreateText(text: Text) {
print("savedUserHeader: \(text.savedUserHeader)")
print("savedUserText: \(text.savedUserText)")
}
}
就这样!当在
ADelegate
方法中创建对象didCreateText(text:)
时,将调用Text
方法:let b = B()
b.a.somefunc()
通知中心
另一个解决方案是NotificationCenter。创建
somefunc()
对象时发布通知:func somefunc(){
let a = Text(savedUserHeader: "testHeader", savedUserText: "testText")
NotificationCenter.default.post(name: Notification.Name("addText"), object: a)
}
在B级观察:
init() {
NotificationCenter.default.addObserver(self, selector: #selector(observeText(noti:)), name: Notification.Name("addText"), object: nil)
}
@objc func observeText(noti: Notification) {
if let text = noti.object as? Text {
print("savedUserHeader: \(text.savedUserHeader)")
print("savedUserText: \(text.savedUserText)")
}
}
让我们来测试一下:
let b = B()
let a = A()
a.somefunc()
你会看到结果:
savedUserHeader: testHeader
savedUserText: testText
关于swift - 如果在Class中创建了对象,如何在Class B中进行观察?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43026196/