ジェネリクスが便利だなーと思ってplistへアクセスするクラスを作った。
class Plist {
private var plist:NSMutableDictionary
init(name:String) {
let filePath = Bundle.main.path(forResource: name, ofType: nil)!
let plist = NSMutableDictionary(contentsOfFile: filePath)!
self.plist = plist
}
// データを取得します。
func get<T>(_ key:String) -> T {
return processing(self.plist.value(forKeyPath: key)) as! T
}
// get?としたかった。
func want<T>(_ key:String) -> T? {
return processing(self.plist.value(forKeyPath: key)) as? T
}
// 共通加工処理
private func processing<T>(_ value:T?) -> T? {
// 例) 改行コードが入っている場合は改行する。
if let str = value as? String {
return str.replacingOccurrences(of: "¥n", with: "\n") as? T
}
return value
}
}
使い方。
hoge.plist
Root
Foo:String = "Test"
let plist = Plist(name: "hoge.plst")
let str:String = plist.get("Foo") # 左辺でStringを期待して待つ。
# str = "Test"
複雑なのも取得可能
hoge.plist
Root
Foo:Dictionary
List:Array
item0:String = "Test1"
item1:String = "Test2"
item2:String = "Test3"
let plist = Plist(name: "hoge.plst")
let list:[String] = plist.get("Foo.List")
for str in list {
print("str")
}
最後に
Swift
にはYaml
が無くて不便だなーと思ってPlist
を敬遠してたんだけど、使ってみると結構便利だった。
ただ、改行コードを入れるためには小細工(コピペや直編集)をしないと使えないところは少し微妙。
こういう型が分からない時のジェネリクスは便利だな。
alamofire
でHTTPリクエストしている時にも思ったけれど。