SwiftUI Codes
Best SwiftUI Code Warehouse

Lesson 10: Data Storage and Network Requests

Objective:

Learn how to store data locally and make network requests.

Content:

1. UserDefaults

The UserDefaults class provides a way to store simple data persistently.

Storing and Retrieving Data:

@State private var username = UserDefaults.standard.string(forKey: "username") ?? ""

var body: some View {
    TextField("Username", text: $username)
        .onDisappear {
            UserDefaults.standard.set(username, forKey: "username")
        }
}

Explanation:

2. CoreData Integration

CoreData is Apple's framework for managing object graphs and persisting data.

Setting up CoreData:

// Assume CoreData setup is done in the AppDelegate or SceneDelegate
@Environment(\.managedObjectContext) private var viewContext

var body: some View {
    // Example of fetching and displaying CoreData entities
    Text("CoreData Example")
}

Explanation:

3. Network Requests with URLSession

Using URLSession to perform network requests.

Fetching Data from the Network:

@State private var data: String = ""

var body: some View {
    VStack {
        Text(data)
        Button("Fetch Data") {
            fetchData()
        }
    }
}

func fetchData() {
    guard let url = URL(string: "https://api.example.com/data") else { return }
    URLSession.shared.dataTask(with: url) { data, response, error in
        if let data = data, let fetchedData = String(data: data, encoding: .utf8) {
            DispatchQueue.main.async {
                self.data = fetchedData
            }
        }
    }.resume()
}

Explanation:

4. Processing JSON Data

Parsing JSON data into Swift models.

Parsing JSON into Swift Models:

struct User: Codable {
    let id: Int
    let name: String
}

@State private var users: [User] = []

var body: some View {
    List(users) { user in
        Text(user.name)
    }
    .onAppear {
        fetchUsers()
    }
}

func fetchUsers() {
    guard let url = URL(string: "https://api.example.com/users") else { return }
    URLSession.shared.dataTask(with: url) { data, response, error in
        if let data = data {
            let decoder = JSONDecoder()
            if let fetchedUsers = try? decoder.decode([User].self, from: data) {
                DispatchQueue.main.async {
                    self.users = fetchedUsers
                }
            }
        }
    }.resume()
}

Explanation:

5. Synchronizing Online and Offline Data

Implementing strategies for data synchronization.

Strategies for Synchronization:

// Placeholder for detailed synchronization logic and implementation
Text("Synchronization Example")

Explanation:

Homepage