質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

473閲覧

配列を持つViewたちの配列を別のViewでList表示

pon3428

総合スコア14

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2022/12/13 07:16

Listの中でNavigationLinkを用いています。

ContentViewのそれぞれのRowをArrayViewにそれぞれのタップ時に中の配列を表示したい

実現したいこと

ContentViewのそれぞれのrowをAnotherViewの Listに表示したい

発生している問題・エラーメッセージ

Static method 'buildBlock' requires that 'String' conform to 'View'

該当のソースコード

SwiftUI

1 2import SwiftUI 3var passedPinned: [String]? 4struct ArrayView: View { 5@State var array = [] 6 @State var row : folderRow 7var body: some View { 8NavigationView { 9List{Section(header: Text("array"))NavigationLink(destination: ContentView(textEditorText: array[index], index: index), label: {Text(array[index])}) 10if row = ContentView.aFolder { 11array = ContentView.aFolder 12} 13if row = ContentView.bFolder { 14array = ContentView.bFolder 15} 16else { 17array = ContentView.cArray 18} 19} 20} 21} 22} 23 24struct ContentView: View { 25@State var pinned = ["pinned"] 26@State var aFolder = [""] 27@State var bFolder = [""] 28@State var cFolder = [""] 29 var body: some View { 30 NavigationView { 31 List{ 32folderRow(rowArray: aFolder, rowImage: Image(systemName: "heart"), rowTitle: "Like") 33folderRow(rowArray: bFolder, rowImage: Image(systemName: "trash"), rowTitle: "Dust") 34folderRow(rowArray: cFolder, rowImage: Image(systemName: "folder"), rowTitle: "Folder") 35 Section(header: Text("テキスト")) 36 { 37 ForEach(0..<self.pinned.count) 38 { index in 39 NavigationLink(destination: AnotherView(), label: {Text(pinned[index])}) 40 .onAppear(perform: { 41 if let recive = passedPinned { 42 pinned = recive 43 } 44 }) 45 .onDisappear(perform: {passedPinned = pinned}) 46 } 47 } 48 } 49 } 50 } 51} 52 53struct AnotherView: View { 54 var body: some View { 55 Text("AnotherView") 56 } 57 } 58 59struct folderRow: View { 60@State var rowArray: [String] = [] 61@State var rowImage = Image(systemName: "folder") 62 @State var rowTitle: String 63var body: some View { 64HStack{ 65rowImage 66rowTitle 67Text("\(rowArray).count") 68} 69}} 70

試したこと

補足情報(FW/ツールのバージョンなど)

Xcodeのバージョンは14.1です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

配列の内容を遷移先で表示したいだけならば、
遷移先を生成する時にフィールドに代入してあげることで
表示することができると思われます。

サンプルコードでは ArrayView を生成時に
フィールド「row」に配列を保存しています。

なお、サンプルコードは分岐のために
三項演算子を使用しています。

これは index が 0 の時

NavigationLink(destination: ArrayView(row: aFolder), label: {folderRow(rowArray: aFolder, rowImageString: "heart", rowTitle: "Like")})

を表示しており、 index が 1 の時

NavigationLink(destination: ArrayView(row: bFolder), label: {folderRow(rowArray: bFolder, rowImageString: "trash", rowTitle: "Dust")})

を表示しており、 index が 2 の時

NavigationLink(destination: ArrayView(row: cFolder), label: {folderRow(rowArray: cFolder, rowImageString: "folder", rowTitle: "Folder")})

を表示しているという内容になります。

SwiftUI

1import SwiftUI 2 3struct ContentView: View { 4 var aFolder = ["項目1-a", "項目2-a"] 5 var bFolder = ["項目1-b", "項目2-b", "項目3-b"] 6 var cFolder = ["項目1-c", "項目2-c", "項目3-c", "項目4-c", "項目5-c"] 7 var body: some View { 8 NavigationView { 9 List{ 10 Section(header: Text("テキスト")) 11 { 12 ForEach(0..<3) 13 { index in 14 NavigationLink(destination: ArrayView(row: (index == 0 ? aFolder : (index == 1 ? bFolder : cFolder))), label: index == 0 ? {folderRow(rowArray: aFolder, rowImageString: "heart", rowTitle: "Like")} : (index == 1 ? {folderRow(rowArray: bFolder, rowImageString: "trash", rowTitle: "Dust")} : {folderRow(rowArray: cFolder, rowImageString: "folder", rowTitle: "Folder")})) 15 } 16 } 17 } 18 } 19 } 20} 21 22struct ArrayView: View { 23 @State var row : [String] 24 var body: some View { 25 List { 26 ForEach (0 ..< row.count) { index in 27 Text(row[index]) 28 } 29 } 30 } 31} 32 33struct folderRow: View { 34 var rowArray: [String] = [] 35 var rowImageString = "" 36 var rowTitle: String = "" 37 var body: some View { 38 HStack{ 39 Image(systemName: rowImageString) 40 Text(rowTitle) 41 Text("\(rowArray.count)") 42 } 43 }} 44 45struct ContentView_Previews: PreviewProvider { 46 static var previews: some View { 47 ContentView() 48 } 49}

投稿2022/12/14 02:56

編集2022/12/14 03:00
uni2

総合スコア254

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問