0

I have such view:

struct PersonalPage: View {
    let preferences = UserDefaults.standard
    var body: some View {
        
        VStack(alignment:.leading){
            HStack {
                Image(systemName: "mappin.circle.fill")
                VStack {
                    Text("88")
                    Text("88")
                    Text("88")
                    
                }
            }
            
        }.onAppear {
            self.getPersonalData()
        }
    }
    
    var mainSession = Session(configuration: URLSessionConfiguration.default, interceptor: EnvInterceptor())
    
    
    func getPersonalData(){
        var request = URLRequest(url: URL(string:Pathes.init().userInfo)!)
        request.httpMethod = "GET"
        
        mainSession.request(request).responseDecodable(of:PersonalInfo.self) { (response) in
            switch response.result{
            case .success:
                guard let userData = response.value else { return }
                self.preferences.set(userData.applicant.email,forKey: "applicant_email")
                self.preferences.set(userData.applicant.id, forKey: "applicant_id")
                self.preferences.set(userData.applicant.delete, forKey: "applicant_can_delete")
                self.preferences.set(userData.applicant.caseManager, forKey: "casemanager_assigned")
                self.preferences.set(userData.applicant.photoChecksum, forKey: "photo_checksum")
                
                
                self.preferences.set(userData.consultant.firstname, forKey: "cons_firstname")
                self.preferences.set(userData.consultant.lastname, forKey: "cons_lastname")
                self.preferences.set(userData.consultant.id, forKey: "cons_id")
                
                self.preferences.synchronize()
                
                
                HomeScreen().self.addBadges()
                
            case .failure:
                print(response.response?.statusCode as Any)
            }
            
        }
        
        
    }
}

and as you can see I have method for getting data from api. So, is it possible to update for example Text with some text from server response and if it possible how I can do it? As I understood I can't do smth like global view variable and have access to its elements from any place of struct?

2
  • Start from Data Flow Through SwiftUI Commented Jul 2, 2020 at 13:26
  • @Asperi, I saw this video before published this question, but I can't understand how to reach my target :( Commented Jul 2, 2020 at 13:29

2 Answers 2

2

If you declare a @State property for each of your desired Text views you can use them in the View body and update them from your function. Here is a brief example I hope helps;

struct PersonalPage: View {
    let preferences = UserDefaults.standard

    @State private var textOne = ""
    @State private var textTwo = ""
    @State private var textThree = ""


    var body: some View {
        VStack(alignment:.leading){
            HStack {
                Image(systemName: "mappin.circle.fill")
                VStack {
                    Text(textOne)
                    Text(textTwo)
                    Text(textThree)
                }
            }   
        }.onAppear {
            self.getPersonalData()
        }
    } 

    func getPersonalData() {
        textOne = "Hello World"
        textTwo = "Map"
    
         DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
             textThree = "Delayed Text"
         }
     }

  }
Sign up to request clarification or add additional context in comments.

Comments

1
struct PersonalPage: View {
@State var personalDataModel = PersonalDataModel()

var body: some View {
    VStack(alignment:.leading){
        HStack {
            Image(systemName: "mappin.circle.fill")
            VStack {
                Text(personalDataModel.cons_lastname)
                Text(personalDataModel.cons_firstname)
                Text(personalDataModel.photo_checksum)
            }
        }
    }.onAppear {
        self.getPersonalData()
    }
}

var mainSession = Session(configuration: URLSessionConfiguration.default, interceptor: EnvInterceptor())

func getPersonalData(){
    var request = URLRequest(url: URL(string:Pathes.init().userInfo)!)
    request.httpMethod = "GET"
    mainSession.request(request).responseDecodable(of:PersonalInfo.self) { (response) in
        switch response.result{
        case .success:
            guard let userData = response.value else { return }
            let personalDataModel = PersonalDataModel()
            personalDataModel.applicant_email = userData.applicant.email
            personalDataModel.applicant_id = userData.applicant.id
            personalDataModel.cons_firstname = userData.consultant.firstname
            self.personalDataModel = personalDataModel
            
            HomeScreen().self.addBadges()
            
        case .failure:
            print(response.response?.statusCode as Any)
        }
        
    }
    
    
    }
}

struct PersonalDataModel : Codable {
public var applicant_email: String = ""
public var id: String = ""
public var applicant_can_delete: String = ""
public var applicant_id: String = ""
public var designation: String = ""
public var casemanager_assigned: String = ""
public var photo_checksum: String = ""
public var cons_firstname: String = ""
public var cons_lastname: String = ""
public var cons_id: String = ""
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.