アプリのデザインとレイアウト

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





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







    Landmark.swift


  1. import Foundation
  2. import SwiftUI
  3. import CoreLocation
  4. struct Landmark: Hashable, Codable, Identifiable {
  5. var id: Int
  6. var name: String
  7. var park: String
  8. var state: String
  9. var description: String
  10. var isFavorite: Bool
  11. var category: Category
  12. enum Category: String, CaseIterable, Codable {
  13. case lakes = "Lakes"
  14. case rivers = "Rivers"
  15. case mountains = "Mountains"
  16. }
  17. private var imageName: String
  18. var image: Image {
  19. Image(imageName)
  20. }
  21. private var coordinates: Coordinates
  22. var locationCoordinate: CLLocationCoordinate2D {
  23. CLLocationCoordinate2D(
  24. latitude: coordinates.latitude,
  25. longitude: coordinates.longitude)
  26. }
  27. struct Coordinates: Hashable, Codable {
  28. var latitude: Double
  29. var longitude: Double
  30. }
  31. }


    ModelData.swift


  1. import Foundation
  2. import Combine
  3. final class ModelData: ObservableObject {
  4. @Published var landmarks: [Landmark] = load("landmarkData.json")
  5. var hikes: [Hike] = load("hikeData.json")
  6. var categories: [String: [Landmark]] {
  7. Dictionary(
  8. grouping: landmarks,
  9. by: { $0.category.rawValue }
  10. )
  11. }
  12. }
  13. func load<T: Decodable>(_ filename: String) -> T {
  14. let data: Data
  15. guard let file = Bundle.main.url(forResource: filename, withExtension: nil)
  16. else {
  17. fatalError("Couldn't find \(filename) in main bundle.")
  18. }
  19. do {
  20. data = try Data(contentsOf: file)
  21. } catch {
  22. fatalError("Couldn't load \(filename) from main bundle:\n\(error)")
  23. }
  24. do {
  25. let decoder = JSONDecoder()
  26. return try decoder.decode(T.self, from: data)
  27. } catch {
  28. fatalError("Couldn't parse \(filename) as \(T.self):\n\(error)")
  29. }
  30. }



    CategoryHome.swift


  1. import SwiftUI
  2. struct CategoryHome: View {
  3. @EnvironmentObject var modelData: ModelData
  4. var body: some View {
  5. NavigationView {
  6. Text("Landmarks Content")
  7. .navigationTitle("Featured")
  8. }
  9. }
  10. }
  11. struct CategoryHome_Previews: PreviewProvider {
  12. static var previews: some View {
  13. CategoryHome()
  14. .environmentObject(ModelData())
  15. }
  16. }


上記のリストの 8 行目の後を以下のように修正します。



    CategoryHome.swift


  1. var body: some View {
  2. NavigationView {
  3. List {
  4. ForEach(modelData.categories.keys.sorted(), id: \.self) { key in
  5. Text(key)
  6. }
  7. }
  8. .navigationTitle("Featured")
  9. }
  10. }


プレビュー



セクション 1セクション 2セクション 3
セクション 4セクション 5
セクション 101セクション 102セクション 103
セクション 104セクション 105






目次
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

    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