SwiftUI NavigationLink 配列で他のContentViewへ遷移する話 ?

- 2020/01/09


# タイトルの通り

> 目的

- NavigationLinkでListの項目からListの数だけ、他の「ContentView1.swift」とかに遷移する

# 準備

- 普通にお好みのファイル名で新規にSwiftUIで作成する
- 作成後にContentView.swiftを差し替えて実行するだけ

# 少し能書き?

- 急いでる人は先に進んでください

> 私がしたい事は? ListでNavigationLinkで他のファイルに遷移してみたかった、サイトにこのコードが無かったから悪戦苦闘しました

# 挙動ですが?

> 起動すると3種類のファイルViewに遷移するように3種類のファイルViewをContentView.swift内に用意しました、Listは3種類のファイルが繰り返しているだけです、私は配列でこの挙動を少ないコードで作成したかった、配列ならば配列を外部から読み込めばバックアップとかも可能です、私の過去にCSVファイルの読み込みとかの記事がありますが次はSwiftUIで再作成してみます、あと、プリント印刷とかも次はSwiftUIで検証してみます、最後はCoreDataで全体を保存も可能ですね? 楽しいですね?

# ContentView.swift

```ContentView.swift

ContentView.swift
//  SwiftUIView
//
//  Created by 福田 敏一 on 2020/01/09.
//  Copyright © 2020 株式会社パパスサン. All rights reserved.
//

import SwiftUI

struct 初期化: Identifiable {
    var id: Int
    let List名: String
    var ファイル名: AnyView? = nil
}

struct ContentView: View {
    
    let 配列: [初期化] = [
        初期化(id: 0, List名: "ContentView1へ", ファイル名: AnyView(ContentView1())),
        初期化(id: 1, List名: "ContentView2へ", ファイル名: AnyView(ContentView2())),
        初期化(id: 2, List名: "ContentView3へ", ファイル名: AnyView(ContentView3())),
        初期化(id: 3, List名: "ContentView1へ", ファイル名: AnyView(ContentView1())),
        初期化(id: 4, List名: "ContentView2へ", ファイル名: AnyView(ContentView2())),
        初期化(id: 5, List名: "ContentView3へ", ファイル名: AnyView(ContentView3())),
        初期化(id: 6, List名: "ContentView1へ", ファイル名: AnyView(ContentView1())),
        初期化(id: 7, List名: "ContentView2へ", ファイル名: AnyView(ContentView2())),
        初期化(id: 8, List名: "ContentView3へ", ファイル名: AnyView(ContentView3())),
        初期化(id: 9, List名: "ContentView1へ", ファイル名: AnyView(ContentView1())),
        初期化(id: 10, List名: "ContentView2へ", ファイル名: AnyView(ContentView2())),
        初期化(id: 11, List名: "ContentView3へ", ファイル名: AnyView(ContentView3())),
        初期化(id: 12, List名: "ContentView1へ", ファイル名: AnyView(ContentView1())),
        初期化(id: 13, List名: "ContentView2へ", ファイル名: AnyView(ContentView2())),
        初期化(id: 14, List名: "ContentView3へ", ファイル名: AnyView(ContentView3())),
        初期化(id: 15, List名: "ContentView1へ", ファイル名: AnyView(ContentView1())),
        初期化(id: 16, List名: "ContentView2へ", ファイル名: AnyView(ContentView2())),
        初期化(id: 17, List名: "ContentView3へ", ファイル名: AnyView(ContentView3())),
        初期化(id: 18, List名: "ContentView1へ", ファイル名: AnyView(ContentView1())),
        初期化(id: 19, List名: "ContentView2へ", ファイル名: AnyView(ContentView2())),
        初期化(id: 20, List名: "ContentView3へ", ファイル名: AnyView(ContentView3())),
        初期化(id: 21, List名: "ContentView1へ", ファイル名: AnyView(ContentView1())),
        初期化(id: 22, List名: "ContentView2へ", ファイル名: AnyView(ContentView2())),
        初期化(id: 23, List名: "ContentView3へ", ファイル名: AnyView(ContentView3())),
        初期化(id: 24, List名: "ContentView1へ", ファイル名: AnyView(ContentView1())),
        初期化(id: 25, List名: "ContentView2へ", ファイル名: AnyView(ContentView2())),
        初期化(id: 26, List名: "ContentView3へ", ファイル名: AnyView(ContentView3())),
        初期化(id: 27, List名: "ContentView1へ", ファイル名: AnyView(ContentView1())),
        初期化(id: 28, List名: "ContentView2へ", ファイル名: AnyView(ContentView2())),
        初期化(id: 29, List名: "ContentView3へ", ファイル名: AnyView(ContentView3())),
        初期化(id: 30, List名: "ContentView1へ", ファイル名: AnyView(ContentView1())),
        初期化(id: 31, List名: "ContentView2へ", ファイル名: AnyView(ContentView2())),
        初期化(id: 32, List名: "ContentView3へ", ファイル名: AnyView(ContentView3())),
        初期化(id: 33, List名: "ContentView1へ", ファイル名: AnyView(ContentView1())),
        初期化(id: 34, List名: "ContentView2へ", ファイル名: AnyView(ContentView2())),
        初期化(id: 35, List名: "ContentView3へ", ファイル名: AnyView(ContentView3())),
        初期化(id: 36, List名: "ContentView1へ", ファイル名: AnyView(ContentView1())),
        初期化(id: 37, List名: "ContentView2へ", ファイル名: AnyView(ContentView2())),
        初期化(id: 38, List名: "ContentView3へ", ファイル名: AnyView(ContentView3())),
        初期化(id: 39, List名: "ContentView1へ", ファイル名: AnyView(ContentView1())),
            ]

    var body: some View {
        NavigationView {
            List {
                ForEach(配列) { ラベル in
                    VStack {
                        NavigationLink(destination: ラベル.ファイル名) {
                            Text(ラベル.List名)
                        }
                    }
                }
            }
        }
    }
    
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

struct ContentView1: View {
    var body: some View {
        Text("ContentView1を開いています")
    }

}

struct ContentView1_Previews: PreviewProvider {
    static var previews: some View {
        ContentView1()
    }
}

struct ContentView2: View {
    var body: some View {
        Text("ContentView2を開いています")
    }

}

struct ContentView2_Previews: PreviewProvider {
    static var previews: some View {
        ContentView2()
    }
}

struct ContentView3: View {
    var body: some View {
        Text("ContentView3を開いています")
    }

}

struct ContentView3_Previews: PreviewProvider {
    static var previews: some View {
        ContentView3()
    }
}


```

# 私の意見ですが ?

苦心して諦めないで悪戦苦闘の結果実現しました ?
ポイントは悪戦苦闘の結果? 初期化の変数の「ファイル名」の型の設定でした、それと配列のラベル「ファイル名」の値の設定の方法でしょうか? 配列が長いのは実行してListが3行だとスクロールがないので寂しいから1から3までの繰り返しです


ここまで