Home > Mobile >  From userDefaults.standard.sring(forKey "name").components(seperatedby: " ") I w
From userDefaults.standard.sring(forKey "name").components(seperatedby: " ") I w

Time:10-28

From userDefaults.standard.sring(forKey "name").components(seperatedby: " ") I want to make a List in a View (SwiftUI List). List { userDefaults.standard.string(forKey "name").components(seperatedby: " ")[1] userDefaults.standard.string(forKey "name").components(seperatedby: " ")[2] ... } with a variable length of userDefaults.standard.string(forKey "name").components(seperatedby: " "

I tried for...in and while but it can't be in a View

CodePudding user response:

First of all you need to fetch data from the UserDefaults and after that build a List. Here you can find more info about List component in SwiftUI: https://www.hackingwithswift.com/quick-start/swiftui/how-to-create-a-list-of-dynamic-items

Also you can't place String inside the List, you should wrap it by Text component (here is info about this component https://developer.apple.com/documentation/swiftui/text)

So this is how it should look like in your case:

struct ContentView: View {
    // Extracting data from UserDefaults
    let names = UserDefaults.standard.string(forKey: "name")?.components(separatedBy: " ") ?? []
    
    var body: some View {
        // List received array of names by first parameter
        List(names, id:\.self) { name in
            Text(name) // <-- Here you wrap your string inside UI component
        }
    }
}

But you should know that this list won't be dynamic. If something will be changed inside UserDefaults, your view won't be updated. For making it dynamic you should create an ObservableObject model for managing your data. You can read more about this protocol on this link: https://www.hackingwithswift.com/quick-start/swiftui/how-to-use-observedobject-to-manage-state-from-external-objects

  • Related