【问题标题】:How to pass observed properties to other classes?如何将观察到的属性传递给其他类?
【发布时间】:2020-10-30 23:37:04
【问题描述】:

我创建了一个 UserData 实例,以便其他类可以观察此实例并使用用户名显示必要的信息。我在这里要做的是,当用户登录时,具有用户相关存储属性的不同类将根据应用程序中的用户活动不时更新(即通过调用 api)。 但是,它在属性初始化程序中显示错误“无法使用实例成员 'userData';属性初始化程序在“自我”可用之前运行。任何想法如何解决这个问题? 我不确定如何将数据从单个 ObservedObject 传递到另一个。

struct passingData: View {
    
    @ObservedObject var userData = UserData()
    @ObservedObject var images = ImageURL(userData: userData)
    @ObservedObject var payment = Payment(userData: userData)
    
    
    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 someDate "
    }

}


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 = ""
    
}

【问题讨论】:

    标签: ios swift class swiftui observable


    【解决方案1】:

    这是可能的解决方案:

    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)
        }
        // ... other code
    

    【讨论】:

    • 当您更改文本字段中的用户名时,网址和付款详情不会更改。这是为什么呢?
    • 这是一个不同的问题,你不觉得吗?
    • 好的,那我开个新帖,也许你能在新帖里帮忙,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    相关资源
    最近更新 更多