swiftUI 第二章

2021-07-14  本文已影响0人  秋叶红90

第2章

1. 本地数据获取

func load<T:Decodable>(_ filename:String)->T  {
    
    
        let data: Data

       guard let file = Bundle.main.url(forResource: filename, withExtension: nil)
       else {
           fatalError("Couldn't find \(filename) in main bundle.")
       }

       do {
           data = try Data(contentsOf: file)
       } catch {
           fatalError("Couldn't load \(filename) from main bundle:\n\(error)")
       }

       do {
           let decoder = JSONDecoder()
           return try decoder.decode(T.self, from: data)
       } catch {
           fatalError("Couldn't parse \(filename) as \(T.self):\n\(error)")
       }
}


2. 模型解析

import MapKit
import SwiftUI
import Foundation
import CoreLocation

struct Landmark: Hashable, Codable {
    var id: Int
    var name: String
    var park: String
    var state: String
    var description: String
    
    private var imageName: String
    var image: Image {
            Image(imageName)
        }
    
    
    private var coordinates: Coordinates

        struct Coordinates: Hashable, Codable {
            var latitude: Double
            var longitude: Double
        }
    var locationCoordinate: CLLocationCoordinate2D {
            CLLocationCoordinate2D(
                latitude: coordinates.latitude,
                longitude: coordinates.longitude)
        }
    
    var mapCoordinate: MKCoordinateRegion {
        MKCoordinateRegion(
                center: locationCoordinate,
                span: MKCoordinateSpan(latitudeDelta: 0.2, longitudeDelta: 0.2)
            )
        }
    
}


2. TableView => List 的使用

List.init(landmarks, id: \.id) { landmark in
    
    NavigationLink(destination: LandmarkDetail(landmark: landmark)) {
        LandMarkRow.init(landmark: landmark)
                    }
}.navigationTitle("Landmarks")

3. 页面跳转

NavigationLink(destination: LandmarkDetail(landmark: landmark)) {
    LandMarkRow.init(landmark: landmark)
上一篇 下一篇

猜你喜欢

热点阅读