首页 > 解决方案 > 传递给不带参数的调用的参数 Data(contentOf:)

问题描述

我正在尝试对jsonswift 4.2 中的数据进行编码和解码,但我遇到了这个错误Argument passed to call that takes no arguments,我不确定做错了什么,尝试了在堆栈中找到的关于错误的内容,但没有成功。这是我的代码参数传递给不带参数的调用

import Foundation

struct Section : Codable {
    var title : String
    var caption : String
    var body : String
    var imageName : String
    var publishDate : Date

    enum CodingKeys : String, CodingKey {
        case title, caption, body
        case imageName = "image"
        case publishDate = "publish_date"
    }
}

class ContentAPI {

    static var shared : ContentAPI = ContentAPI()


    lazy var sections : Array<Section> = {
        let url = Bundle.main.url(forResource: "myFile", withExtension: "json")!
        let data = try! Data(contentsOf: url)
        let decoder = JSONDecoder()
        decoder.dateDecodingStrategy = .secondsSince1970
        return try! decoder.decode(Array<Section>.self, from: data)
    }()
}

标签: arraysjsonswiftdecode

解决方案


您的主要问题是您忘记了尾随,}()否则代码应该安全运行,并且无论文件是否存在都不会导致崩溃

lazy var sections : Array<Section> = {

    guard let path = Bundle.main.path(forResource: "myFile", ofType: "json") else { return [] }
    let url = URL(fileURLWithPath: path)

    guard let data = try? Data(contentsOf: url) else { return [] }

    do {
        let decoder = JSONDecoder()
        decoder.dateDecodingStrategy = .secondsSince1970
        let sections = try decoder.decode(Array<Section>.self, from: data)
        return sections
    } catch {
        print(error)
    }
    return []
}()

推荐阅读