構造体のプロパティを更新するために利用する@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は状態を変更するって意味ね。言われてみれば簡単だな。