🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

Q&A

解決済

1回答

2832閲覧

SwiftUIでForEachの中で0番目の時に判定を入れて処理を分岐したい

hodoru3sei

総合スコア284

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

0グッド

0クリップ

投稿2021/03/19 17:01

ForEachの中で0番目の時に固有の処理を行いたいのですがエラーになってしまい困っています。
試食べてみた所SwiftUIではForEachなどではViewの処理以外は書けないという記事を見つけたのですがその場合どうやって処理を書けばいいのかわからず困っています。

swift

1struct ContentView: View { 2 var body: some View { 3 ForEach(5, id: .self) { count in 4 if count == 0 { 5 print("0番固定の処理") 6 } 7 Text("Hello, world!") 8 .padding() 9 } 10 } 11}

Error

1Type '()' cannot conform to 'View'; only struct/enum/class types can conform to protocols

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんな感じでいかがでしょうか。
参考: How to print() to Xcode console in SwiftUI? - Stack Overflow

swift

1extension View { 2 func Print(_ vars: Any...) -> some View { 3 for v in vars { print(v) } 4 return EmptyView() 5 } 6} 7 8struct ContentView: View { 9 var body: some View { 10 ForEach(0..<5, id: .self) { count in 11 if count == 0 { 12 Print("0番固定の処理") 13 } 14 Text("Hello, world!") 15 .padding() 16 } 17 } 18}

print 以外のことをしたいなら、例えばこんな感じ。(濫用しない方がいいと思いますが。)

swift

1extension View { 2 func DoIt(_ f: () -> Void) -> some View { 3 f() 4 return EmptyView() 5 } 6} 7 8struct ContentView: View { 9 @State var array = [0, 1, 2] 10 11 var body: some View { 12 ForEach(array, id: .self) { count in 13 if count == 0 { 14 DoIt { 15 print("0番固定の処理") 16 if array.count < 6 { 17 DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { 18 array.append(3) 19 } 20 } 21 } 22 } 23 Text("Hello, world! (count)") 24 .padding() 25 } 26 } 27}

投稿2021/03/19 17:29

編集2021/03/19 17:54
hoshi-takanori

総合スコア7899

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

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

hodoru3sei

2021/03/20 04:52

なるほど!extensionにはやせばいいんですね!ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問