SwiftUI Essentials (SwiftUI の本質)

ビルドリストとナビゲーション

基本的なランドマーク詳細ビューを設定したら、ユーザがランドマークの完全なリストを表示し、各場所の詳細を表示する方法を提供する必要があります。


ランドマークに関する情報を表示できるビューを作成し、ユーザがタップしてランドマークの詳細ビューを表示できるスクロールリストを動的に生成します。UI を微調整するには、Xcode のキャンバスを使用して、さまざまなデバイスサイズで複数のプレビューをレンダリングします。


プロジェクトファイルをダウンロードしてこのプロジェクトのビルドを開始し、以下の手順に従って下さい。


35min


予想される時間

プロジェクト
ファイル

Xcode 12





訳注:以下、必要な場所においては Mac と iPhone 両方のセクションを提供しています。
Mac → セクション 1、iPhone → セクション 101 とします。





    Landmark.swift


  1. import Foundation
  2. struct Landmark: Hashable, Codable {
  3. var id: Int
  4. var name: String
  5. var park: String
  6. var state: String
  7. var description: String
  8. }




    Landmark.swift


  1. import Foundation
  2. import SwiftUI
  3. struct Landmark: Hashable, Codable {
  4. var id: Int
  5. var name: String
  6. var park: String
  7. var state: String
  8. var description: String
  9.  
  10. private var imageName: String
  11. var image: Image {
  12. Image(imageName)
  13. }
  14. }


15 行からを以下のように書き足します。


  1. private var coordinates: Coordinates
  2. struct Coordinates: Hashable, Codable {
  3. var latitude: Double
  4. var longitude: Double
  5. }
  6. }


これを以下のように換えます。


    Landmark.swift


  1. import Foundation
  2. import SwiftUI
  3. import CoreLocation
  4. struct Landmark: Hashable, Codable {
  5. var id: Int
  6. var name: String
  7. var park: String
  8. var state: String
  9. var description: String
  10. private var imageName: String
  11. var image: Image {
  12. Image(imageName)
  13. }
  14. private var coordinates: Coordinates
  15. var locationCoordinate: CLLocationCoordinate2D {
  16. CLLocationCoordinate2D(
  17. latitude: coordinates.latitude,
  18. longitude: coordinates.longitude)
  19. }
  20. struct Coordinates: Hashable, Codable {
  21. var latitude: Double
  22. var longitude: Double
  23. }
  24. }


    ModelData.swift


  1. import Foundation
  2. func load<T: Decodable>(_ filename: String) -> T {
  3. let data: Data
  4. guard let file = Bundle.main.url(forResource: filename, withExtension: nil)
  5. else {
  6. fatalError("Couldn't find \(filename) in main bundle.")
  7. }
  8. do {
  9. data = try Data(contentsOf: file)
  10. } catch {
  11. fatalError("Couldn't load \(filename) from main bundle:\n\(error)")
  12. }
  13. do {
  14. let decoder = JSONDecoder()
  15. return try decoder.decode(T.self, from: data)
  16. } catch {
  17. fatalError("Couldn't parse \(filename) as \(T.self):\n\(error)")
  18. }
  19. }


上記のリストの 2 行目の所に以下のリストを付け加えます。


  1. var landmarks: [Landmark] = load("landmarkData.json")



セクション 1セクション 2セクション 3セクション 4
セクション 5セクション 6セクション 7セクション 8
セクション 101セクション 102セクション 103セクション 104
セクション 105セクション 106セクション 107セクション 108








目次
Xcode の新機能

フレームワーク

  • SwiftUI

  • ビューの作成と結合

    セクション 1

    セクション 2

    セクション 3

    セクション 4

    セクション 5

    セクション 6


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    セクション 105

    セクション 106

    ビルドリストとナビゲーション

    セクション 1

    セクション 2

    セクション 3

    セクション 4

    セクション 5

    セクション 6

    セクション 7

    セクション 8


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    セクション 105

    セクション 106

    セクション 107

    セクション 108

    ユーザー入力の処理

    セクション 1

    セクション 2

    セクション 3

    セクション 4

    セクション 5

    セクション 6


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    セクション 105

    セクション 106

    パスとシェイプの描画

    セクション 1

    セクション 2

    セクション 3

    セクション 4


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    ビューと移行のアニメーション

    セクション 1

    セクション 2

    セクション 3

    セクション 4

    セクション 5


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    セクション 105

    複雑なインターフェースの構成

    セクション 1

    セクション 2

    セクション 3

    セクション 4

    セクション 5


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    セクション 105

    UI コントロールを扱う

    セクション 1

    セクション 2

    セクション 3

    セクション 4

    セクション 5


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    セクション 105

    UIKit とのインターフェース

    セクション 1

    セクション 2

    セクション 3

    セクション 4


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    watchOS アプリの作成

    セクション 1

    セクション 2

    セクション 3

    セクション 4

    セクション 5


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    セクション 105

    macOS アプリの作成

    セクション 1

    セクション 2

    セクション 3

    セクション 4

    セクション 5

    セクション 6

    セクション 7


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    セクション 105

    セクション 106

    セクション 107