Lui*_*ujo 1 xcode ios swift swiftui
我是 IOS 开发的新手,我正在使用 swiftUI 并遵循本教程https://developer.apple.com/tutorials/swiftui/building-lists-and-navigation但我已经被困在这里一段时间了,在教程,他们从项目中的 json 文件中传递一项
struct LandmarkRow_Previews: PreviewProvider {
static var previews: some View {
LandmarkRow(landmark: landmarkData[0])
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试对我自己的数据做同样的事情,我有一个名为 sorteosData.json 的文件,但是当我尝试将第一个项目传递给预览时,它显示“使用未解析的标识符”
struct PastSorteoRowView_Previews: PreviewProvider {
static var previews: some View {
PastSorteoRowView(sorteo: sorteosData[0])
}
Run Code Online (Sandbox Code Playgroud)
Xcode 无法识别 sorteosData[0],我该如何解决?我遵循了教程中的所有步骤,但由于某种原因,我无法将数据传递给预览
Joa*_*nes 13
随着JSON你需要使用JSONDecoder(). 假设我们有这个文件:
[
{
"name": "Banana",
"points": 200,
"description": "A banana grown in Ecuador."
},
{
"name": "Orange",
"points": 100
}
]
Run Code Online (Sandbox Code Playgroud)
为方便起见,您可以创建一个struct(即使对于嵌套元素也很方便):
struct product: Codable, Hashable {
var name: String
var points: Int
var description: String?
}
Run Code Online (Sandbox Code Playgroud)
创建一个函数来解析你的JSONin 包,调用list.json它返回一个arrayof struct product:
func jsonTwo() -> [product]{
let url = Bundle.main.url(forResource: "list", withExtension: "json")!
let data = try! Data(contentsOf: url)
let decoder = JSONDecoder()
let products = try? decoder.decode([product].self, from: data)
return products!
}
Run Code Online (Sandbox Code Playgroud)
最后设置你的界面:
var body: some View {
List{
ForEach(jsonTwo(), id: \.self) { item in
VStack(alignment: .leading, spacing: 0){
Text("name:\(item.name) - points:\(item.points)")
Text("\(item.description ?? "")")
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
完整代码:
struct product: Codable, Hashable {
var name: String
var points: Int
var description: String?
}
struct ContentView: View {
func jsonTwo() -> [product]{
let url = Bundle.main.url(forResource: "list", withExtension: "json")!
let data = try! Data(contentsOf: url)
let decoder = JSONDecoder()
let products = try? decoder.decode([product].self, from: data)
return products!
}
var body: some View {
List{
ForEach(jsonTwo(), id: \.self) { item in
VStack(alignment: .leading, spacing: 0){
Text("name:\(item.name) - points:\(item.points)")
Text("\(item.description ?? "")")
}
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3082 次 |
| 最近记录: |