iT邦幫忙

2024 iThome 鐵人賽

DAY 18
0
Mobile Development

SwiftUI快速入門30天系列 第 18

Day18 - URLSession 和 Codable,使用網路請求獲取資料

  • 分享至 

  • xImage
  •  

在SwiftUI中,使用 URLSessionCodable 來處理網路請求並獲取資料是很常見的做法。這裡我將為你展示如何使用這些技術來從網路 API 獲取資料並將其顯示在SwiftUI的畫面中。

範例說明

假設我們有一個 API,返回一些用戶的資料,格式如下:

[
    {
        "id": 1,
        "name": "John Doe",
        "email": "john@example.com"
    },
    {
        "id": 2,
        "name": "Jane Smith",
        "email": "jane@example.com"
    }
]

我們將使用 URLSession 來進行網路請求,並使用 Codable 協定來解析返回的 JSON 資料。

步驟 1: 建立數據模型

首先,定義與 JSON 對應的資料模型,並讓它遵守 Codable 協定:

struct User: Codable, Identifiable {
    let id: Int
    let name: String
    let email: String
}

步驟 2: 建立網路管理類別

接著,我們建立一個網路管理類別,負責發送網路請求並解析返回的資料:

class NetworkManager: ObservableObject {
    @Published var users: [User] = []

    func fetchUsers() {
        guard let url = URL(string: "https://example.com/api/users") else { return }

        let task = URLSession.shared.dataTask(with: url) { data, response, error in
            if let data = data {
                do {
                    let decodedUsers = try JSONDecoder().decode([User].self, from: data)
                    DispatchQueue.main.async {
                        self.users = decodedUsers
                    }
                } catch {
                    print("Error decoding data: \(error)")
                }
            } else if let error = error {
                print("Error fetching data: \(error)")
            }
        }

        task.resume()
    }
}

步驟 3: 在 SwiftUI 視圖中使用網路資料

最後,我們在 SwiftUI 視圖中使用這個網路管理類別來顯示資料:

struct ContentView: View {
    @StateObject private var networkManager = NetworkManager()

    var body: some View {
        NavigationView {
            List(networkManager.users) { user in
                VStack(alignment: .leading) {
                    Text(user.name)
                        .font(.headline)
                    Text(user.email)
                        .font(.subheadline)
                        .foregroundColor(.gray)
                }
            }
            .navigationTitle("Users")
            .onAppear {
                networkManager.fetchUsers()
            }
        }
    }
}

解釋

  1. User 模型: 使用 Codable 來解析 JSON 資料。
  2. NetworkManager 類別: 使用 URLSession 來進行網路請求並解析資料。使用 @Published 來讓 SwiftUI 在資料改變時更新視圖。
  3. ContentView: 使用 @StateObject 來持有 NetworkManager 的實例,並在 onAppear 方法中調用 fetchUsers() 來載入資料。

這個範例展示了如何使用 URLSessionCodable 來從 API 獲取資料並在 SwiftUI 應用中顯示。你可以依照這個範例來處理各種網路請求和資料解析。


上一篇
Day17 - @EnvironmentObject 和 @StateObject,使用環境物件和狀態物件管理資料
下一篇
Day19 - @FetchRequest,使用 Core Data 獲取資料
系列文
SwiftUI快速入門30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言