SwiftUI 网络请求转换为 Model - 详细教程
要将 SwiftUI 网络请求转换为 model,可以按照以下步骤进行操作:\n\n1. 创建一个 model 结构体,该结构体表示从网络请求中获取到的数据。例如,你可以创建一个名为 User 的结构体,其中包含用户的属性,如 id,name,email 等。\n\nswift\nstruct User: Codable {\n let id: Int\n let name: String\n let email: String\n}\n\n\n2. 创建一个包含网络请求的函数。你可以使用 URLSession.shared.dataTask(with:completionHandler:) 方法来执行网络请求,并在请求完成后将数据转换为 model 对象。\n\nswift\nfunc fetchUser(completion: @escaping (Result<User, Error>) -> Void) {\n guard let url = URL(string: "https://api.example.com/user") else {\n completion(.failure(NSError(domain: "Invalid URL", code: 0, userInfo: nil)))\n return\n }\n \n URLSession.shared.dataTask(with: url) { data, response, error in\n if let error = error {\n completion(.failure(error))\n return\n }\n \n guard let data = data else {\n completion(.failure(NSError(domain: "No data received", code: 0, userInfo: nil)))\n return\n }\n \n do {\n let decoder = JSONDecoder()\n let user = try decoder.decode(User.self, from: data)\n completion(.success(user))\n } catch {\n completion(.failure(error))\n }\n }.resume()\n}\n\n\n3. 在 SwiftUI 视图中使用这个网络请求函数。你可以使用 @State 属性包装一个可变的 model 对象,并在视图的 body 中调用网络请求函数。\n\nswift\nstruct ContentView: View {\n @State private var user: User?\n \n var body: some View {\n VStack {\n if let user = user {\n Text("ID: (user.id)")\n Text("Name: (user.name)")\n Text("Email: (user.email)")\n } else {\n Text("Loading...")\n }\n }\n .onAppear {\n fetchUser { result in\n switch result {\n case .success(let user):\n self.user = user\n case .failure(let error):\n print(error.localizedDescription)\n }\n }\n }\n }\n}\n\n\n在上述示例中,ContentView 视图使用 @State 属性包装了一个可选的 user 对象。在视图的 onAppear 生命周期方法中,它调用了 fetchUser 函数来获取用户数据,并根据请求的结果来更新 user 属性。在视图的 body 中,根据 user 是否为 nil 来显示不同的文本。\n\n这样,你就可以将 SwiftUI 网络请求转换为 model,并在视图中使用获取到的数据进行展示。
原文地址: https://www.cveoy.top/t/topic/ptZn 著作权归作者所有。请勿转载和采集!