見出し画像

SwiftUIでいこう!- スタンフォード大学Lecture 2 - 3

"CardView()"をうまく使う

いろんな絵文字に対応するため変数を作ります。

var content:String

変数"content"に入れた絵文字データが反映されるようにします。

Text(content)

変数の部分を変更したもの全文は以下となります。

struct CardView:View {
   var content:String
   @State var isFaceUp:Bool=true
  
   var body: some View{
       ZStack{
           let shape =  RoundedRectangle(cornerRadius: 20.0)
           if isFaceUp{
               shape
                   .fill()
                   .foregroundColor(.white)
               
               shape
                   .stroke(lineWidth: 3)
               Text(content)
                   .font(.largeTitle)
           }else{
               shape
                   .fill()
           }
       
       }.onTapGesture {
           isFaceUp = !isFaceUp
       }
   }
}

これをContentView()で読み込めるようにします。

struct ContentView: View {

   var body: some View {
       HStack{
           CardView(content:"✈️"])
           CardView(content:"🐶")
           CardView(content:"🐱")
           
       }
       .padding(.horizontal)
       .foregroundColor(.red)
   }
}

emojis(絵文字)を配列で管理すると便利で、いろんな絵文字を入れておくことができます。

var emojis = ["✈️","🐶","🐱","🐻"]
struct ContentView: View {
   var emojis = ["✈️","🐶","🐱","🐻"]
   var body: some View {
       HStack{
           CardView(content:emojis[0])
           CardView(content:emojis[1])
           CardView(content:emojis[2])
           CardView(content:emojis[3])
           
       }
       .padding(.horizontal)
       .foregroundColor(.red)
   }
}

配列で定義してある絵文字の分だけ、繰り返しなので "ForEach"を使って配列の繰り返し、CardViewの(content:emoji)に入れていきます。

struct ContentView: View {
   var emojis = ["✈️","🐶","🐱","🐻"]
   var body: some View {
       HStack{
           ForEach(emojis, id: \.self,content:{emoji in
               CardView(content:emoji)
           })
       }
       .padding(.horizontal)
       .foregroundColor(.red)
   }
}

カッコ、波カッコの部分を整理します。

 HStack{
           ForEach(emojis, id: \.self){emoji in
               CardView(content:emoji)
           }
       }

全体は

struct ContentView: View {
   var emojis = ["✈️","🐶","🐱","🐻"]
   var body: some View {
       HStack{
           ForEach(emojis, id: \.self){emoji in
               CardView(content:emoji)
           }
       }
       .padding(.horizontal)
       .foregroundColor(.red)
   }
}

これで配列分のCardView()が連続して作ることができます。構造体CardView()を別に作ってContentViewで使うことでわかりやすく機能を追加しやすくなりました。

この記事が気に入ったらサポートをしてみませんか?