목록 보기에 대한 SwiftUI 5.5 API 데이터
10162 단어 programmingiosswiftuiswift
Todo API 서비스
네트워크 요청을 보내려면 API 서비스를 만들어야 합니다. URLSession을 사용합니다. 여기에 모든 할일 항목을 가져오고 [TodoItem]으로 역직렬화하는 한 가지 방법이 있습니다.
struct TodoItem: Identifiable, Codable {
let id: Int
let title: String
let completed: Bool
}
enum APIError: Error{
case invalidUrl, requestError, decodingError, statusNotOk
}
let BASE_URL: String = "https://jsonplaceholder.typicode.com"
struct APIService {
func getTodos() async throws -> [TodoItem] {
guard let url = URL(string: "\(BASE_URL)/todos") else{
throw APIError.invalidUrl
}
guard let (data, response) = try? await URLSession.shared.data(from: url) else{
throw APIError.requestError
}
guard let response = response as? HTTPURLResponse, response.statusCode == 200 else{
throw APIError.statusNotOk
}
guard let result = try? JSONDecoder().decode([TodoItem].self, from: data) else {
throw APIError.decodingError
}
return result
}
}
Todo 뷰모델
뷰 모델은 차례로 API 서비스를 사용하여 todos를 가져온 다음 게시합니다.
@MainActor
class TodoViewModel: ObservableObject {
@Published var todos: [TodoItem] = []
@Published var errorMessage = ""
@Published var hasError = false
func getTodos() async {
guard let data = try? await APIService().getTodos() else {
self.todos = []
self.hasError = true
self.errorMessage = "Server Error"
return
}
self.todos = data
}
}
토도 뷰
마지막으로 할 일 목록 상태 변경에 대해 ViewModel을 감시하는 보기가 있습니다. 할 일 목록이 보기에 표시됩니다. 목록에 보기가 API를 호출합니다.
struct TodoList: View {
@StateObject var vm = TodoViewModel()
var body: some View {
List{
ForEach(vm.todos){todo in
HStack{
Image(systemName: todo.completed ? "checkmark.circle": "circle")
.foregroundColor(todo.completed ? .green : .red)
Text("\(todo.title)")
}
}
}
.task {
await vm.getTodos()
}
.listStyle(PlainListStyle())
.navigationTitle("Todos")
}
}
Reference
이 문제에 관하여(목록 보기에 대한 SwiftUI 5.5 API 데이터), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/paulallies/swiftui-55-api-data-to-list-view-1fdl텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)