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

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

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

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

Q&A

解決済

1回答

548閲覧

別 ViewのTextEditorへの分岐による代入

pon3428

総合スコア14

Swift

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

0グッド

0クリップ

投稿2022/12/14 07:23

編集2022/12/14 07:28

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

配列をそれぞれ別Viewに入れさらにその配列のテキストを別ViewのTextEditorに入れたいです

実現したいこと

配列をそれぞれのセルタップ毎に別Viewで表示しさらにそれらの配列を別ViewのTextEditorに入れたいです

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

Expected ':' after '? ...' in ternary expression

該当のソースコード

SwiftUI

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

試したこと

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

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

dFolderには別Viewから任意で追加します。

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

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

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

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

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

pon3428

2022/12/14 09:06

struct ArrayView: View { @State var row : [String] var body: some View { List{ Section(header: Text("テキスト")) { ForEach(0..<self.row.count) { index in NavigationLink(destination: AnotherView(textEditorText: (row[index])))}} .onAppear(perform: { if let recive = passedPinned { row = recive } }) .onDisappear(perform: {passedPinned = row}) } } } } としました。
guest

回答1

0

ベストアンサー

3項演算子で
A ? B : C : D
という形状になっているため
このエラーが発生していると思われます。

1個の ? で3個分岐しようとした結果
エラーが発生しているため、
1個の ? で2個の分岐になるように組めば
エラーが消えると思われます。

また、遷移先の変数を遷移元と共有する場合
@Buinding を使用する方法があるみたいなので
調べてみることをおすすめします。

SwiftUI

1import SwiftUI 2 3struct ContentView: View { 4 @State var aFolder = ["a1", "a2"] 5 @State var bFolder = ["b1", "b2", "b3"] 6 @State var cFolder = ["c1", "c2", "c3", "c4"] 7 @State var dFolder = ["d1", "d2"] 8 var body: some View { 9 NavigationView { 10 List{ 11 Section(header: Text("テキスト")) 12 { 13 ForEach(0..<4) 14 { index in 15 NavigationLink(destination: ArrayView(row: (index == 0 ? $aFolder : (index == 1 ? $bFolder : (index == 2 ? $cFolder : $dFolder)))), label: index == 0 ? 16 {folderRow(rowArray: aFolder, rowImageString: "heart", rowTitle: "Like")} : (index == 1 ? {folderRow(rowArray: bFolder, rowImageString: "trash", rowTitle: "Dust")} : (index == 2 ? {folderRow(rowArray: cFolder, rowImageString: "folder", rowTitle: "Folder")} : {folderRow(rowArray: dFolder, rowImageString: "folder", rowTitle: "Folder")}))) 17 } 18 } 19 } 20 } 21 } 22} 23 24struct folderRow: View { 25 var rowArray: [String] = [] 26 var rowImageString = "" 27 var rowTitle: String = "" 28 var body: some View { 29 HStack{ 30 Image(systemName: rowImageString) 31 Text(rowTitle) 32 Text("\(rowArray.count)") 33 } 34 } 35} 36 37struct ArrayView: View { 38 @Binding var row : [String] 39 var body: some View { 40 NavigationView { 41 List{ 42 Section(header: Text("テキスト")) 43 { 44 ForEach(0..<self.row.count) 45 { index in 46 NavigationLink(destination: AnotherView(row: $row, index: index), label: {Text(row[index])}) 47 } 48 } 49 } 50 } 51 } 52} 53 54struct AnotherView: View { 55 @Binding var row: [String] 56 var index: Int 57 var body: some View { 58 TextEditor(text: $row[index]) 59 .frame(maxWidth: .infinity, maxHeight: .infinity) 60 } 61}

投稿2022/12/15 01:44

uni2

総合スコア256

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問