Swiftで遊ぼう! - 459 - Navigation Controllers and Table Views 3
Swiftで遊ぼう!の古い記事-> Life-LOG OtherSide
Beginning iPhone Development with Swift: Exploring the iOS SDK
- 作者: David Mark,Jack Nutting,Kim Topley,Fredrik Olsson,Jeff LaMarche
- 出版社/メーカー: Apress
- 発売日: 2014/11/19
- メディア: Kindle版
- この商品を含むブログを見る
FavoritesListをシングルトン・パターンで実装している途中です。シングルトンで操作するプロパティを用意します。
「private(set) var favorites: [String] 」をシングルトンプロパティの下に追加します。
// Beginning iPhone Development with Swift: Exploring the iOS SDK // Swift 1.0スタイル import Foundation import UIKit class FavoritesList { class var sharedFavoriteList: FavoritesList { struct Shingleton { static let instance = FavoritesList() } return Singleton.instance } private(set) var favorites: [String] init() { let defaults = NSUserDefaults.standardUserDefaults() let storedFavorites = defaults.objectForKey("favorites") as? [String] favorites = storedFavorites != nil ? storedFavorites : [] } // コードは続く }
このコーディングは古いのですが説明を加えます。プロパティのfavoritesは初期化ステップで保存されたリストがあるかどうか判断して、前回の起動時に保存されたリストがあればロードして、無ければ空欄を入れています。「favorites = storedFavorites != nil ? storedFavorites : []」この最後のコードは分かりますか?
私は上記のコードを下のように変えました。
import Foundation import UIKit class FavoritesList { static let sharedFavoriteList: FavoritesList = FavoritesList() private(set) var favorites: [String] private init() { let defaults = NSUserDefaults.standardUserDefaults() guard let storedFavorites = defaults.objectForKey("favorites") as? [String] else { favorites = [] return } favorites = storedFavorites } // コードは続く }
しかし、もう少し簡略化もできるかなと考えて次も提案。
class FavoritesList { static let sharedFavoriteList: FavoritesList = FavoritesList() let defaults = NSUserDefaults.standardUserDefaults() private(set) var favorites: [String] { get {return defaults.objectForKey("favorites") as? [String] ?? []} set {defaults.setObject(newValue, forKey: "favorites")} } private init() {} // コードは続く }
こういうのはありでしょうか?
今日はここまで。