Как передать наблюдаемые свойства другим классам? - PullRequest
2 голосов
/ 10 июля 2020

Я создал экземпляр UserData, чтобы другие классы могли наблюдать за этим экземпляром и отображать необходимую информацию, используя имя пользователя. Я пытаюсь сделать здесь следующее: когда пользователь входит в систему, различные классы с сохраненными свойствами, связанными с пользователем, будут время от времени обновляться (то есть путем вызова api) в зависимости от активности пользователя в приложении. Однако он показывает ошибку «Невозможно использовать член экземпляра userData» в инициализаторе свойства; Инициализаторы свойств запускаются до того, как «self» станет доступным ». Есть идеи, как это решить? Я не уверен, как передавать данные из одного 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 = ""
    
}

1 Ответ

1 голос
/ 10 июля 2020

Вот возможное решение:

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
...