【发布时间】:2021-12-16 14:49:24
【问题描述】:
我了解如何从 JSON API(实际上是我的本地服务器)“获取”数据,但我应该如何考虑从仅拥有数据到在视图中显示数据的管道?我直观地想要做的是从获取函数中“返回”数据,尽管我知道这不是 Swift URL 函数操作的范例。我的想法是,如果我可以“返回”数据(作为结构),就很容易将其传递到视图中进行可视化。
示例代码:
这是获取的 JSON 的结构以及我想要传递给视图的变量类型。
struct User: Codable {
let userID: String
let userName: String
let firstName: String
let lastName: String
let fullName: String
}
我希望 printUser 函数可以返回而不是打印成功的获取。
func printUser() {
fetchUser { (res) in
switch res {
case .success(let user):
print(user.userName) // return here?
// I know it won't work, but that's what seems natural
case .failure(let err):
print("Failed to fetch user: ", err)
}
}
}
func fetchUser(completion: @escaping (Result<User, Error>) -> ()) {
let urlString = "http://localhost:4001/user"
guard let url = URL(string: urlString) else { return }
URLSession.shared.dataTask(with: url) { (data, resp, err) in
if let err = err {
completion(.failure(err))
return
}
do {
let user = try JSONDecoder().decode(User.self, from: data!)
completion(.success(user))
} catch let jsonError {
completion(.failure(jsonError))
}
}.resume()
}
采用用户结构的示例视图
struct DisplayUser: View {
var user: User
var body: some View {
Text(user.userID)
Text(user.userName)
Text(user.lastName)
Text(user.firstName)
Text(user.fullName)
}
}
【问题讨论】: