Swiftで遊ぼう! on Hatena

あしたさぬきblogでやってた初心者オヤジのiOSプログラミング奮闘記がHatenaに来ました

Swiftで遊ぼう! - 666 - Course Overview and Introduction to iOS, Xcode, and Swift 2

ポール先生の話は勉強になります。

Developing iOS 9 Apps with Swift - Free Course by Stanford on iTunes U

Calculatorデモの説明をしています。Main.storyboardに作った「5」ボタンをコピー&ペーストで増やして並べます。

f:id:yataiblue:20160507152914j:plain

これをシュミレーターでランしてボタンをタップすると、どれを押してもコンソールに「touchDigit」が表示されます。しかし、どのボタンが押されたか分かりません。senderのタイトルが分かれば区別できるはずです。そこでsenderのプロパティやメソッドを調べるためにDcumentation and API Referenceと「Opt + クリック」の使い方を説明があり、「currentTitle」というプロパティを探し出します。

sendder.currentTitleの値を保持する変数「var digit」を用意すると、「let」に変更するように警告されます。ここで「let」を使用することの重要性が説明されます。

コードの説明は続きます。次にSwiftで特徴的な「Optional」というの説明になります。「not set」と「set」の違い、「set」の場合は「associated value」が存在するということで、「Optional("5"):[Optional型set]」と「5:[String型associated value]」は全く異なるになります。associated valueを使用する場合は「アンラップ(!)」しなければなりません。メソッドは次のようなコードになりました。

    @IBAction func touchDigit(sender: UIButton) {
        let digit = sender.currentTitle!
        print("touchef \(digit) digit")
    }

コンソールではなくラベルに表示するためにUILableをdigitボタンの上に設置してアトリビュートを変更します。ViewControllerに「Ctrl + ドラッグ」で繋ぐと、@IBActionと同様の@IB枕詞のついたプロパティが生成されます。しかしよく見ると宣言の最後に「!」がついていて「@IBOutlet weak var display: UILabel!」のようになっています。「!」と「?」はどちらも同じようにオプショナル型の宣言になります。この両者の違いを説明するためにポール先生は「?」に変更してコードを次のように書きました*1

    @IBOutlet weak var display: UILabel?
    
    @IBAction func touchDigit(sender: UIButton) {
        let digit = sender.currentTitle!
        let textCurrentlyInDisplay = display!.text!
        display!.text = textCurrentlyInDisplay + digit
    }

これをランすると次の様になります。

f:id:yataiblue:20160507155858j:plain

あれ?何かおかしいですね。頭の「0」が要りません。

今日はここまで。

*1:この説明は後ほど...また記事が公開された時にリンクします。