arrays - 传递给不带参数的调用的参数 Data(contentOf:)
问题描述
我正在尝试对json
swift 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)
}()
}
解决方案
您的主要问题是您忘记了尾随,}()
否则代码应该安全运行,并且无论文件是否存在都不会导致崩溃
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 []
}()
推荐阅读
- google-sheets - 谷歌表格查询在一个单元格内使用空格分隔符搜索多个列
- jira - Jira 插件安装
- javascript - 由于页面重新加载,Sweetalert 在出现后突然关闭
- node.js - 无法使用 node.js 上的 aws-sdk 更新 dynamoDb 上的项目
- java - Spring Security /login - 404 未找到
- azure-devops - 在 Azure DevOps 多阶段管道中部署预先存在的项目
- javascript - 将 AudioBuffer 转换为 ArrayBuffer / Blob 以供 WAV 下载
- c - 条件数据观察点在 ARM GDB 中不起作用
- ios - 在继续下一个代码iOS swift之前等待响应结果
- c# - 实体框架核心从父子集合中获取单个子