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

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

詳細はこちら
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

解決済

1回答

928閲覧

SwiftUI Listでのデータの受け渡しができなくてつまづいている。

taichi_dm_

総合スコア60

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

0クリップ

投稿2019/12/04 02:28

編集2019/12/04 02:34

LoginView.swift

SwiftUI

1import SwiftUI 2 3struct LoginView: View { 4 5 var body: some View { 6 NavigationView { 7 8 VStack { 9 //VStackやHStackを入れないとNavigationViewが機能しないらしい。 10 Text("ようこそ") 11 .font(.system(size: 60)) 12 .fontWeight(.thin) 13 Divider().padding() 14 Spacer() 15 16 17 NavigationLink(destination: HomeView()) { 18 HStack { 19 20 Image(systemName: "person") 21 .foregroundColor(.gray) 22 Text("ログイン") 23 .font(.title) 24 .fontWeight(.thin) 25 } 26 } 27 Divider().padding(20) 28 NavigationLink(destination: EmptyView()) { 29 HStack(alignment: .center) { 30 Image(systemName: "pencil.circle") 31 .foregroundColor(.gray) 32 Text("登録はこちらから!") 33 .font(.title) 34 .fontWeight(.thin) 35 36 } 37 } 38 Divider().padding(20) 39 NavigationLink(destination: NotificationView(notification: testData, posts: testPosts)) { 40 HStack { 41 Image(systemName: "paperplane") 42 .foregroundColor(.gray) 43 Text("お知らせ") 44 .font(.title) 45 .fontWeight(.thin) 46 } 47 48 } 49 Spacer() 50 } 51 52 } 53 } 54} 55 56struct ContentView_Previews: PreviewProvider { 57 static var previews: some View { 58 LoginView() 59 } 60}

HomeView.swift

import SwiftUI struct HomeView: View { var body: some View { TabView { TimeLineView(posts: testPosts) .tabItem { Image(systemName: "house") .font(.title) } .tag(1) Text("Tab Content 2") .tabItem { Image(systemName: "heart") .font(.title) } .tag(2) Text("user") .tabItem { Image(systemName: "person") .font(.title) } .tag(3) } } } struct HomeView_Previews: PreviewProvider { static var previews: some View { HomeView() } }

TimeLineView.swift

SwiftUI

1import SwiftUI 2 3struct TimeLineView: View { 4 var posts: [Posts] = [] 5 var body: some View { 6 List(posts) { posts in 7 HStack { 8 VStack { 9 Image(posts.imageOfUser) 10 .resizable() 11 .scaledToFit() 12 .clipShape(Circle()) 13 .overlay(Circle().stroke(Color.white, lineWidth: 1)) 14 .shadow(radius: 10) 15 .frame(width: 66, height: 66) 16 Spacer() 17 } 18 VStack { 19 HStack { 20 Text(posts.name).bold() 21 Text("@" + "(posts.username)").fontWeight(.light) 22 Spacer() 23 }.padding(5) 24 Text(posts.text) 25 } 26 } 27 } 28 Text("text") 29 } 30} 31 32struct TimeLineView_Previews: PreviewProvider { 33 static var previews: some View { 34 TimeLineView(posts: testPosts[0]) 35 } 36}

Posts.swift

import SwiftUI struct Posts: Identifiable { var id = UUID() var name: String var username: String var text: String var numReply: Int var numRepost: Int var numLike: Int var imageOfUser: String { return name + "Thumb" } } let testPosts = [ Posts( name: "マクドナルド", username: "McDonaldsJapan", text: "選べる2つの食感!...", numReply: 29, numRepost: 3087, numLike: 17000), Posts( name: "こが", username: "testtest", text: "長門市の.....", numReply: 1, numRepost: 0, numLike: 4) ]

やりたいこと:

この、LoginView()、HomeView()、TimeLineView()と、Postsを使って、ツイッターのように、テストデータ用データからユーザーネームや本文などを取得して、タイムライン表示させたいです。
この画像のログインボタンを押すと、
上の画像のログインボタンを押すと、
こちらの画面に遷移します
↑こちらの画面に遷移して、ライムラインのように表示させたいです。エラーが出るため

SwiftUI

1Text("text") 2```を代わりに置いています。") 3 4```SwiftUI 5var posts:[Posts] = []

や、

SwiftUI

1let posts: Posts

などの記述が間違っているとエラーがでていて、自力じゃどうすればいいかわからなかったので、質問させていただきました。
拙い文でしたが、なんとか伝わればと思います。
ご教授お願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

いろいろ削りましたが、こんな感じで動作しましたよ?

swift

1import SwiftUI 2 3struct ContentView: View { 4 var body: some View { 5 NavigationView { 6 7 VStack { 8 //VStackやHStackを入れないとNavigationViewが機能しないらしい。 9 Text("ようこそ") 10 Divider().padding() 11 Spacer() 12 13 14 NavigationLink(destination: TimeLineView(posts: testPosts)) { 15 HStack { 16 Text("テスト") 17 .font(.title) 18 .fontWeight(.thin) 19 } 20 } 21 22 Spacer() 23 } 24 25 } 26 } 27} 28 29struct Posts: Identifiable { 30 var id = UUID() 31 var name: String 32 var username: String 33 var text: String 34 var numReply: Int 35 var numRepost: Int 36 var numLike: Int 37 38 var imageOfUser: String { return name + "Thumb" } 39 40} 41 42let testPosts = [ 43 Posts( 44 name: "マクドナルド", 45 username: "McDonaldsJapan", 46 text: "選べる2つの食感!...", 47 numReply: 29, numRepost: 3087, numLike: 17000), 48 Posts( 49 name: "こが", 50 username: "testtest", 51 text: "長門市の.....", 52 numReply: 1, numRepost: 0, numLike: 4) 53] 54 55struct TimeLineView: View { 56 var posts: [Posts] 57 58 var body: some View { 59 List(posts) { posts in 60 HStack { 61 VStack { 62 Image(posts.imageOfUser) 63 .resizable() 64 .scaledToFit() 65 .clipShape(Circle()) 66 .overlay(Circle().stroke(Color.white, lineWidth: 1)) 67 .shadow(radius: 10) 68 .frame(width: 66, height: 66) 69 Spacer() 70 } 71 VStack { 72 HStack { 73 Text(posts.name).bold() 74 Text("@" + "(posts.username)").fontWeight(.light) 75 Spacer() 76 }.padding(5) 77 Text(posts.text) 78 } 79 } 80 } 81 } 82} 83 84struct ContentView_Previews: PreviewProvider { 85 static var previews: some View { 86 ContentView() 87 } 88} 89

投稿2019/12/04 05:59

takabosoft

総合スコア8356

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問