• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 如何将从 Internet 下载的数据保存到内部设备?

[复制链接]
菜鸟教程小白 发表于 2022-12-11 20:11:07 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有这个代码:

struct ServerConnect {
    enum Result<T> {
        case succes(T)
        case error(String)
    }

    typealias completionHandler = (Result<Data >) -> ()

    func getJsonFromServer(parameters: String, completion: @escaping completionHandler) {
        let fullUrlString = ApiConstans.fullPath + parameters
        guard let url = URL(string: fullUrlString) else {
            debugPrint("\(ErrorsLabels.ServerConnect01)")
            return completion(.error("\(ErrorsLabels.ServerConnect01)"))
        }

        URLSession.shared.dataTask(with: url) {  (data, response, error) in
            guard error == nil else {
                debugPrint("\(ErrorsLabels.ServerConnect02)")
                return completion(.error("\(ErrorsLabels.ServerConnect02)"))
            }

            guard let data = data else {
                debugPrint("\(ErrorsLabels.ServerConnect03)")
                return completion(.error("\(ErrorsLabels.ServerConnect03)"))
            }

            debugPrint("R> \(fullUrlString)")
            return completion(.succes(data))
            }.resume()
    }


    func getJsonProducts(lang: String?, region: Int?, completion: @escaping completionHandler) {
        self.getJsonFromServer(parameters: "?action=GET_PRODUCTS&lang=\(lang!)&region=\(region!)", completion: completion)
    }

}

我想将从互联网下载的数据保存在设备的内存中。

我正在尝试这段代码:

getJsonProducts(lang: selectedLanguage, region: selectedRegion , completion: { (data) in
                    print("@@@@@ \(data)")
                     saveJsonFileToTheDisk(path: selectedLanguage + "/json/products.json",  downloadData: data)
                })

func saveJsonFileToTheDisk(path: String, downloadData: Data){
        do {
            let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
            let fileURL = documentsURL.appendingPathComponent(path)
            try downloadData.write(to: fileURL, options: .atomic)
        } catch { }
    }

但不幸的是,它不起作用。我怎样才能让它发挥作用?

以下是错误:

Cannot convert value of type 'ServerConnect.Result' to expected argument type 'Data'



Best Answer-推荐答案


根据getJsonProducts方法的定义:

func getJsonProducts(lang: String?, region: Int?, completion: @escaping (Result<Data>) -> ()) {

发送到completion block 的参数data实际上是包含数据的Result类型,而不是数据本身。因此,您应该这样做:

getJsonProducts(lang: selectedLanguage, region: selectedRegion, completion: { result in
    switch result {
    case .succes(let data):
        saveJsonFileToTheDisk(path: selectedLanguage + "/json/products.json",  downloadData: data)
    case .error(let errorMessage):
        // Do something with the error message.
        break
    }
})

关于ios - 如何将从 Internet 下载的数据保存到内部设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50445705/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap