gpt4 book ai didi

ios - 如何将数据从观察到的类传递到另一个类?

转载 作者:行者123 更新时间:2023-12-01 19:30:56 25 4
gpt4 key购买 nike

这篇文章与this post that I made有关。尽管现在不再存在初始化错误,但这里似乎存在一个问题:当您在文本字段中更改用户名时,网址和付款明细是否仍不会更新?任何想法如何解决这个问题?

struct passingData: View {

@ObservedObject var userData: UserData
@ObservedObject var images: ImageURL
@ObservedObject var payment: Payment

init() {
let data = UserData()

self.userData = data
self.images = ImageURL(userData: data)
self.payment = Payment(userData: data)
}



var body: some View {

VStack{
TextField("Enter userName", text: $userData.userName)
Text("url is \(images.imageURL)")
Text("Payment detail: \(payment.paymentDate)")
}
}
}


class Payment: ObservableObject{
@Published var paymentDate = ""
@ObservedObject var userData: UserData
init(userData: UserData){
self.userData = userData
loadPaymentDate()
}

func loadPaymentDate(){
self.paymentDate = "last payment date from \(userData.userName) is 12.12.22 "
}

}


class ImageURL: ObservableObject{
@Published var imageURL = ""
@ObservedObject var userData: UserData
init(userData: UserData){
self.userData = userData
loadImageURL()
}

func loadImageURL(){
self.imageURL = "123_\(userData.userName).com"
}
}



class UserData: ObservableObject{
@Published var userName = ""

}

最佳答案

您不能在类中使用@ObservedObject属性包装器,它仅适用于View
这是一个类的解决方案演示。经过Xcode 12 / iOS 14测试

import Combine

class ImageURL: ObservableObject{
@Published var imageURL = ""

private var userData: UserData // << reference type
private var observer: AnyCancellable?
init(userData: UserData){
self.userData = userData

// observe changes of userName via publisher explicitly
self.observer = userData.$userName.sink(receiveValue: {[weak self] _ in
self?.loadImageURL()
})

loadImageURL()
}

func loadImageURL(){
self.imageURL = "123_\(userData.userName).com"
}
}

关于ios - 如何将数据从观察到的类传递到另一个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62846183/

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