gpt4 book ai didi

swift - 如果在Class中创建了对象,如何在B类中观察?

转载 作者:行者123 更新时间:2023-11-28 06:22:16 35 4
gpt4 key购买 nike

我的对象:

//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
}
}
}

最佳答案

委托(delegate)

你可以使用委托(delegate)模式来观察,让我们创建一个名为ADelegate的协议(protocol):

protocol ADelegate {
func didCreateText(text: Text)
}

然后,在类 A 中添加一个名为 delegate 的变量,并将一个 Text 对象传递给 didCreateText(text:) 方法中的 somefunc():

//First Class
class A {

var delegate: ADelegate?

func somefunc(){
let a = Text(savedUserHeader: "testHeader", savedUserText: "testText")
delegate?.didCreateText(text: a)
}
}

接下来,当你在B中创建一个对象A时,设置a.delegate = self并实现ADelegate协议(protocol):

//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)")
}
}

就是这样!当在 somefunc() 方法中创建对象 Text 时,将调用方法 didCreateText(text:):

let b = B()
b.a.somefunc()

通知中心

另一个解决方案是 NotificationCenter。让我们在创建 Text 对象时发布通知:

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中创建了对象,如何在B类中观察?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43026196/

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