ios - 如何将数据从观察到的类传递给另一个?
问题描述
这篇文章与我所做的这篇文章有关。虽然现在没有初始化错误,但似乎这里有一个问题:当您在文本字段中更改用户名时,url 和付款明细仍然不会更新?知道如何解决这个问题吗?
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"
}
}
推荐阅读
- python - 将异步生成器聚合到元组
- c# - Unity 5 C# - 如何更改场景并从最后一个场景导入所有资源
- c++ - 在不知道键的情况下获取 std::map 中值的类型
- python - 尝试创建一个 Python 程序来查找二次方的根
- javascript - Vue 可以破坏按钮功能吗?
- visual-studio - 带有 VS 2017 BuildTools 的 MSBuild 在构建时设置了错误的 $(VSInstallDir)
- sql - 在 SQL 插入查询中插入特殊字符
- python-3.x - 打印多个分隔符 Python 3
- reactjs - Reactjs - 我如何复制道具?
- mysql - 将 Laravel 连接到远程 MySQL 数据库时出现问题:“在握手时丢失与 MySQL 服务器的连接”和“MySQL 服务器已消失”