Microbit & Swift Play Grounds 〜ボタン押下イベント処理〜
https://blog.hatena.ne.jp/Takunoji/takunoji.hatenablog.com/edit?sidebar=category
今回は、マイクロビットのボタンを押下した時の処理を行います、処理内容としては以下の2パターンを作成します。
1. Aボタンを押下
LEDの部分に「Hello World」を表示します。
2. Bボタンを押下
ハートマークを表示します。
<実行結果>
ここのコードを見てみます。
clearScreen()
onButtonPressed(.A, handler: {
let textToDisplay = "Hello World"
showString(textToDisplay)
})
onButtonPressed(.B, handler: {
let imageToDisplay = iconImage(.heart)
imageToDisplay.showImage()
})
こんな感じになります、「onButtonPressed()」の引数に「.A」と「handler」にメソッド(関数)を渡しています。
JavaとかJSなどでよく使用する「ラムダ式」の様なものでSwiftでは「クロージャ」と呼ぶ様です。WikiPedia参照
つまり「『.A』のイベントを受けたらhandlerの処理を行います」という処理になります。
下に続く処理も同様です。
「let」に関して
以前、letは定数を示すもので値を下の様に変更するとエラーになります。と記載しました。
let value = "定数"
value = "他の値"
しかし、上のコードlet imageToDisplay = iconImage(.heart)の様に変数「imageToDisplay」にオブジェクトを代入している場合は固定値「オブジェクト」が変わらないので中身の値を変更しても大丈夫という虚をついた様なルールがあるので注意です。
余談
Javaでの定数の宣言方法は「final」という予約語を使用します。
コードに書くと下の様になります。
<エラーになるケース>
final String value = "定数";
https://blog.hatena.ne.jp/Takunoji/takunoji.hatenablog.com/edit?sidebar=category
value = "他の値";
<エラーにならないケース>
final MyClass cls = new MyClass();
cls.setValue("定数");
cls.setValue("他の値");
上の様にオブジェクト(クラスのインスタンス)を設定している場合はエラーになりません。「cls」の中にはオブジェクト(クラスのインスタンス)が入っていて、そのオブジェクト自体を変更したわけではないのでOKということです。
自分はここに気がつくのに結構な時間を要しました。。。
でわでわ。。。