如何将 json 解码为 Codable 以便在 SwiftUI 预览中使用?
How to decode json into a Codable to use in a SwiftUI Preview?
想知道是否有办法将某些 json 解码为 Codable,它是 View 的依赖项,以便我可以使用 swiftUI 预览?
这是 Codable 的工作单元测试
func testDecode() {
let data = Data(jsonProj.utf8)
//frmt
let frmt2 = DateFormatter()
frmt2.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSX"
//decoder
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
let container = try decoder.singleValueContainer()
let dateStr = try container.decode(String.self)
guard let d = frmt2.date(from: dateStr) else { fatalError() } //fixme some danger here
return d
})
do {
let p = try decoder.decode(Project.self, from: data)
XCTAssertEqual(p.id, 2)
print(p)
}
catch {
print(error)
XCTFail()
}
}
我想在这里使用它
struct PreProjectCell_Previews: PreviewProvider {
//static let decodedJson: Project ... NEED THIS PART
static var previews: some View {
NavigationView {
List {
PreProjectCell(project: <#Project#>)
}
}
}
}
extension Project {
static var preview: Self {
let data = Data(jsonProj.utf8)
//frmt
let frmt2 = DateFormatter()
frmt2.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSX"
//decoder
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
let container = try decoder.singleValueContainer()
let dateStr = try container.decode(String.self)
guard let d = frmt2.date(from: dateStr) else { fatalError() } //fixme some danger here
return d
})
return try! decoder.decode(Self.self, from: data)
}
}
然后在您的 SwiftUI 预览版中,您可以执行以下操作:
struct PreProjectCell_Previews: PreviewProvider {
static var previews: some View {
NavigationView {
List {
PreProjectCell(project: .preview)
}
}
}
}
想知道是否有办法将某些 json 解码为 Codable,它是 View 的依赖项,以便我可以使用 swiftUI 预览?
这是 Codable 的工作单元测试
func testDecode() {
let data = Data(jsonProj.utf8)
//frmt
let frmt2 = DateFormatter()
frmt2.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSX"
//decoder
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
let container = try decoder.singleValueContainer()
let dateStr = try container.decode(String.self)
guard let d = frmt2.date(from: dateStr) else { fatalError() } //fixme some danger here
return d
})
do {
let p = try decoder.decode(Project.self, from: data)
XCTAssertEqual(p.id, 2)
print(p)
}
catch {
print(error)
XCTFail()
}
}
我想在这里使用它
struct PreProjectCell_Previews: PreviewProvider {
//static let decodedJson: Project ... NEED THIS PART
static var previews: some View {
NavigationView {
List {
PreProjectCell(project: <#Project#>)
}
}
}
}
extension Project {
static var preview: Self {
let data = Data(jsonProj.utf8)
//frmt
let frmt2 = DateFormatter()
frmt2.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSX"
//decoder
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
let container = try decoder.singleValueContainer()
let dateStr = try container.decode(String.self)
guard let d = frmt2.date(from: dateStr) else { fatalError() } //fixme some danger here
return d
})
return try! decoder.decode(Self.self, from: data)
}
}
然后在您的 SwiftUI 预览版中,您可以执行以下操作:
struct PreProjectCell_Previews: PreviewProvider {
static var previews: some View {
NavigationView {
List {
PreProjectCell(project: .preview)
}
}
}
}