Swiftで遊ぼう! - 240 - AnyObjectの実装...?
Swiftで遊ぼう!の古い記事-> Life-LOG OtherSide
プロパティ・リストとは、何となく理解したレベルで話をすると、アプリが中断したときにデータを一時的に回避させて、アプリが復帰したときに元に戻すようなものじゃないだろうか?
CalculatorBrainのコードの中にAnyObject型のprogramという変数を実装させる。
var program: AnyObject { get { // これから実装 } set { // これから実装 } }
基本的にprogramは計算型プロパティで、その時の状況で内容が変化する。
ちょっとCalculatorBrainクラスをみてみると、プロパティはopStackとknownOpsしか値を保持していない。そのうえknownOpsは辞書型で、記号とメソッド(クロージャ)の関連性を定義しているだけなので、アプリのデータ保持はopStackであろう。
すると、get{}で取り込むデータはopStackだろう。しかし、このアレーはイーナム型で、これをすべて保持する必要はない。String型の値だけ取りだして保存するというやり方のようだ。
次のようにget{}の中を実装
get { var returnValue = Array<String>() for op in opStack { returnValue.append(op.description) } return returnValue }
こらを次のように切り替えることができるところがSwiftの凄さかな
get { return opStack.map { $0.description } }
驚きですね。アレーに「map」というメソッドがありアイテムを一度に変換させることができるし、そのルールをクロージャーで与えることができるんですからね。
しかし、完全に頭が混乱しました。
しばし、情報の整理をしていきます(^^;)