Optional型とかアンラップとか
スイフトの不満を今日も書いていきます!おそらく次のアプリが完成するまで備忘録を兼ねて更新頻度上がるかもしれません
さて昨日はアニメーションを効率的に書く方法を試行錯誤してました。その際、時間を測りたかったのでNSTimer(これもセレクタで指定なので不便)を使ってアニメーション処理中の経過時間を表示する仕組みを作ろうとしていたのですが、ここでハマりました。
ラベルのテキスト(label.text)を数値型に変換しなければならないのですが、これがとてつもなく厄介でした
objective-cなら
と書けば問答無用でラベルのテキストを数値型(int)に変換してくれるにもかかわらずスイフトの場合はOptional型をアンラップしなければ計算も出来ず数値にも変換されませんでした。しかも自分の環境はswift1.1でweb上によくあるswift2.0以降のメソッドは使えないため余計にこんがらがってしまいました。
結局
var stringNumber:String = label.text! //アンラップ
var numberFromString = stringNumber.toInt()! //アンラップ
こんな感じにすることによってもともとOptional型のlabel.textをアンラップすることによって普通の数値として扱うことが出来ました
ところでOptional型やアンラップってなんですか?何回説明読んでもなんのためにあるのかわからないのですが。なんでnilやNullを認めちゃダメなの?それからletって必要ですか?varだけで良くない?ジャバスクリプトが恋しい
アニメーションの効率的(っぽい)書き方についてはまた今度にします。Cocos2DやUnityはあえて使ってません。Unityは次の次の次のアプリくらいから使う予定です。
(追記)
UIViewのframe指定用の数値がただのfloatでは受け付けなくなってる!CGFloat型にしないとうまく処理されませんでした。Objective-cから退化してませんか?それは流石に言いすぎか。
(追記2)
ー Optional型 ー
nilを受け付けることができる型
計算とか変換とか出来ない処理が多い
ラップされた状態
「?」はOptional型を表す
ー アンラップ ー
Optional型を取り除くこと「!」とかが有名
変換や計算もできるようになる
nilは受け付けない(nilは0扱いでいいのに…)
ー let ー
定数
なぜかswiftでは良く目にする
#defineより使いにくく厳格且つ気軽