首页 > 解决方案 > SwiftUI - 如何在 Swift 中使用结果

问题描述

如果我使用此代码,则工作正常。

import Foundation

enum NetworkError: Error {
    case badURL }

func fetchUnreadCount(from urlString: String, completionHandler: @escaping (Result<Int, NetworkError>) -> Void)  {
    guard let url = URL(string: urlString) else {
        completionHandler(.failure(.badURL))
        return
    }
    // complicated networking code here
    print("Fetching \(url.absoluteString)...")
    completionHandler(.success(5)) }




fetchUnreadCount(from: "https://www.hackingwithswift.com") { result in
    switch result {
    case .success(let count):
        print("\(count) unread messages.")
    case .failure(let error):
        print(error.localizedDescription)
    } }

如果我在 SwiftUI 中使用相同的代码,则不起作用(请参阅屏幕截图亲爱的)

在此处输入图像描述

我该如何消除错误?

标签: swiftui

解决方案


body必须返回一个视图,所以只需添加return EmptyView()或您想要显示的任何视图fetchUnreadCount

struct ContentView: View {

    var body: some View {

        fetchUnreadCount(from: "https://www.hackingwithswift.com") { result in
            switch result {
            case .success(let count):
                print("\(count) unread messages.")
            case .failure(let error):
                print(error.localizedDescription)
            } }

        return EmptyView()

    }
}

无论如何,你不应该在视图中获取数据,这项工作应该在模型中完成


推荐阅读