構造体のプロパティを更新するために利用する@Stateの理解が大事
struct ContentView: View { var body: some View { Button(action: { let num = Int.random(in: 0...100) print(num) }){ Text("Random Button") .font(.largeTitle) .frame(width: 280, height: 60, alignment: .center) .foregroundColor(Color.white) .background(Color.pink) .cornerRadius(15, antialiased: true) } } }
初期値をセットする
L スコープ内にあるようにbodyの外に定義する
L selfはimmutableなので、変更可能な変数にするために、宣言のvar numの前に@Stateを付ける ※SwiftUIを使用しない場合はmutatingをつける
@State var num:Int = 0 var body: some View { VStack { Button(action: { num = Int.random(in: 0...100) print(num) }){ Text("Random Button") .font(.largeTitle) .frame(width: 280, height: 60, alignment: .center) .foregroundColor(Color.white) .background(Color.pink) .cornerRadius(15, antialiased: true) } Text("\(num)") .font(.largeTitle) .padding() } }
ボタンの簡易的な書式
VStack { Button("Tap"){ msg = "ありがとう" } .font(.headline) .foregroundColor(.white) .background( Capsule() .foregroundColor(.green) .frame(width:80, height:30) ) Text(msg).padding() }
ボタン名を引数labelで指定する書式
@State var num:Int = 0 var body: some View { HStack { Text("\(num)") .font(.system(size: 50)) .padding(.trailing) Button(action: { num += 1}, label: { Text("Tap").font(.largeTitle) }) .frame(width: 200, height: 80, alignment: .center) .border(Color.gray, width: 1) } }
乱数とシャッフル
for _ in 1 ... 5 { let num = Int.random(in: 1 ... 10) print(num) } for _ in 1 ... 5 { let num = Double.random(in: 0 ..< 1) print(num) } for _ in 1 ... 5 { let num = Bool.random() print(num) }
配列などのコレクションからランダムに選択
L item! としてオプショナルをアンラップする必要がある
let colors = ["green", "red", "blue", "pink", "orange"] for _ in 1 ... 5 { let item = colors.randomElement() print(item!) } let letters = "ABCDEFGHIJKLMN" for _ in 1 ... 5 { let item = letters.randomElement() print(item!) }
ジャンケン
let janken = ["グー", "チョキ", "パー"] @State var te = "" var body: some View { VStack { Button("ジャンケン"){ te = janken.randomElement()! } .foregroundColor(.white) .background( Capsule() .foregroundColor(.blue) .frame(width: 120, height: 40) ) Text(te) .font(.largeTitle) .padding() } }
@Stateは状態を変更するって意味ね。言われてみれば簡単だな。