Swiftで遊ぼう! on Hatena

あしたさぬきblogでやってた初心者オヤジのiOSプログラミング奮闘記がHatenaに来ました

Swiftで遊ぼう! - 459 - Navigation Controllers and Table Views 3

Swiftで遊ぼう!の古い記事-> Life-LOG OtherSide

Beginning iPhone Development with Swift: Exploring the iOS SDK

Beginning iPhone Development with Swift: Exploring the iOS SDK

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() {}
 // コードは続く
}

こういうのはありでしょうか?

今日はここまで。