json 调用详细信息页有什么错误

omhiaaxx  于 2022-12-01  发布在  其他
关注(0)|答案(1)|浏览(148)
import SwiftUI

struct SchoolsDetailView: View {
    
    var data: School
    
    var body: some View {
        VStack{
             Text((data.properties.name)!)
             .modifier(CustomTextM(fontName: "OpenSans-Regular", fontSize: 20, fontColor: Color.black))
             Spacer()
             (Text("(") + Text((data.properties.areaCode)!) + Text(")-") + Text((data.properties.phone)!))
             .modifier(CustomTextM(fontName: "OpenSans-Regular", fontSize: 15, fontColor: Color.black))
             (Text((data.properties.address)!) + Text(", ") + Text(data.properties.city!) + Text(", ") + Text(data.properties.state!))
             .modifier(CustomTextM(fontName: "OpenSans-Regular", fontSize: 15, fontColor: Color.black))
        }
    }
}

struct SchoolsDetailView_Previews: PreviewProvider {
    static var previews: some View {
        NavigationStack{
            SchoolsDetailView(data: SchoolModel().schools[2])
            
        }

它不断输出索引外的数组。如果我执行“SchoolModel().schools.first!",它会输出“在展开可选值时意外地发现nil”
不确定如何调用它。从列表视图,它segues和显示细节罚款,但在详细信息页,它不断打印出错误。

bihw5rsg

bihw5rsg1#

当希望支持预览和使用不可变数据时,最好将简单类型传递给视图,而不是富模型类型,例如

struct SchoolsDetailView: View {
    
    let name: String
    let area: String
    let address: String

这使您可以简单地执行以下操作:

struct SchoolsDetailView_Previews: PreviewProvider {
    static var previews: some View {
            SchoolsDetailView(name: "Test Name", area: "Test Area", address: "Test Address")
        }

这增加了效率,即仅当实际显示的数据改变时才重新计算body,而不是当学校的另一个属性改变而未显示时不必要地重新计算body。
有关更多信息,请观看WWDC 2020 Structure your app for SwiftUI previews,特别是第一个示例“首先,我们将看一个将不可变的简单数据类型传递到不需要更改值的视图中的示例。”

相关问题