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

标签 ios swift class swiftui observable

这篇文章与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/

相关文章:

ios - 在 uitabbarcontroller 中更改选项卡名称

iphone - 使用自定义表格单元格更改选择图像

swift - 使用未声明的类型 'KDDragAndDropManager' 和 'KDDragAndDropCollectionViewDataSource'

java - 如何使用多态性在java中制作不同类型的列表?

c++ - 一段初学者 C++ 代码的模糊编译器错误

c++ - 如何从类对象返回值?

ios - UITableView 内的自定义 UIButton 在按下后保持突出显示

ios - 如何在重定向到/login后再次登录而不出现任何http错误

ios - 无法构造“任务”,因为它没有可访问的初始值设定项

swift - Segue 和 Button 以编程方式 swift