飛躍がないように心がけて書きます。わからないところがあれば返信してください。
このチュートリアルを取り組む上ではSwiftUIの良さの一つである「抽象的に書くことで汎用性が高まる」ということを念頭におくといいと思います。
1行目のListはリスト表示するためのビューの名前です。これは良いと思います。
landmarkDataはlet landmarkData: [Landmark] = load("landmarkData.json")
と定義されています。(見つからない時は????で検索できます。)
これをみると[landmark]型で、json形式のファイルを読み込むものということがわかると思います。
ここでさらにlandmark
というものを見ると
struct Landmark: Hashable, Codable, Identifiable {
var id: Int
var name: String
fileprivate var imageName: String
fileprivate var coordinates: Coordinates
var state: String
var park: String
var category: Category
var isFavorite: Bool
var isFeatured: Bool
var locationCoordinate: CLLocationCoordinate2D {
CLLocationCoordinate2D(
latitude: coordinates.latitude,
longitude: coordinates.longitude)
}
enum Category: String, CaseIterable, Codable, Hashable {
case featured = "Featured"
case lakes = "Lakes"
case rivers = "Rivers"
case mountains = "Mountains"
}
}
と定義されています。これが何を表しているのか理解するためには、jsonファイルとこのlandmark
を見比べてみてください。
idは順番を揃えるために必要なものです。大抵id: .self
などですが、このjsonファイルにはidという情報があるので、その順番になるようになっています。
次にlandmark in
のlandmarkですが、これは引数名なので、landmark
である必然性はないです。試しにlandmark
全部aaaa
に変えてみてください。
最後にLandmarkRow(landmark: landmark)
のLandmark
はリストに並べるものです。
Landmark
には
struct LandmarkRow: View {
var landmark: Landmark
とあり、呼び出す時にはlandmarkを指定する必要があるので、指定しています。
LandmarkRow
のプレビューでは2つだけ並んでいます。これを全部並べるには...と考えるとわかりやすいと思います。
長くなりましたが、以上です。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/31 07:32
2020/06/01 04:21 編集