Swiftで遊ぼう! - 322 - My Picker Project : 依存性ピッカー
Swiftで遊ぼう!の古い記事-> Life-LOG OtherSide
質問 : Swiftで遊ぼう! - 252 - FaceViewプロジェクト始動 - Swiftで遊ぼう! on Hatena
Beginning iPhone Development with Swift: Exploring the iOS SDK
- 作者: David Mark,Jack Nutting,Kim Topley,Fredrik Olsson,Jeff LaMarche
- 出版社/メーカー: Apress
- 発売日: 2014/11/19
- メディア: Kindle版
- この商品を含むブログを見る
Dependent Pickerとは、Double Pickerのように2つ並んだ項目の1つを動かすと、他方もそれに合わせて値が変わるという仕組みです。
デモでは、米国の州のリストを切り替えてやると、ZIPコードが切り替わりますが、何千という項目のデータを扱うため、データの保持する方法が変わりました。
今までの少ないデータはViewConroller内に保持していましたが、今回はプロパティリストを使います。
プロパティリスト(Property List)に関する話題は以前しました。
その頃は全く理解できていませんでしが、実際のデモで実装してみて少し理解がすすみました。
プロパティリストは基本的に外部に保持するデータでNSArrayやNSDictionaryのようにObjective-Cのデータタイプとして扱うという意味ですね。以前は良くわかってなかったようです*1。
どうして古いObjective-Cを使わなければならないのか、理由として、SwiftのDictionary型に外部からデータを取り込む機能が無いからです! しかし、NSDictionary型は外部のデータを取り込むことができるので、NSDictionaryのメソッドを使って外部からデータ(プロパティリスト)を取り込んで、SwiftのDictionary型にキャスト(as)をするという手間をかけてます*2。
プロパティリストですが、フィルの拡張子は「plist」だったんですね。今まで「plist」って何か知らずに目にしてました。
まずデモのデータ構造を分かり易く説明します。
これをコードで表現します。
private var stateZips: [String : [String]]
これはSwift側で用意するコンテナになります。実際の「州とZipコード」が入力されたデータを出版社のウエッブサイトからダウンロードして、Xcodeのプロジェクトナビゲータの「My Picker Project」にコピーすると、statedictionary.plistファイルができます。これをクリックするとデータだけ編集することができます。
これはプログラム外データになります。これを今のところSwiftで読み込むことができないというのですが、どうしてでしょう?Swiftは、まだ完成された開発環境でないから今後機能強化されていくのでしょうか?まだまだSwiftの開発の方向性を推測できるほど知識がないので、素直にNSDictionaryを利用する方法を身につけていきます。
今日はここまで。
*1:まだ勘違いしているかもしれませんが...
*2:こういうObjective-CとSwiftの混在する状況は徐々に解消されていくのでしょうか?数年もすれば、キャストをするコーディングは使われなくなるのかもしれませんね。