2016-08-31 7 views
1

UserDefaultsで作業している間に無数のcoolFeatureEnabled文字列リテラルを繰り返すのがうんざりです。 Swift 3でそれらを取り除く良い方法があれば?ここでSwift 3で `UserDefaults`の` forKey`文字列リテラルを取り除くには?

var coolFeatureEnabled: Bool { 
    get { return UserDefaults.standard.bool(forKey: "coolFeatureEnabled") } 
    set { UserDefaults.standard.set(newValue, forKey: "coolFeatureEnabled") } 
} 

答えて

1

それをチェックアウト@danスウィフト3で#function

// a little bit of setup 

private func getBool(key: String = #function) -> Bool { 
    return UserDefaults.standard.bool(forKey: key) 
} 

private func setBool(_ newValue: Bool, key: String = #function) { 
    UserDefaults.standard.set(newValue, forKey: key) 
} 


// and here is the fun part 

var coolFeatureEnabled: Bool { 
    get { return getBool() } 
    set { setBool(newValue) } 
} 

var anotherFeatureEnabled: Bool { 
    get { return getBool() } 
    set { setBool(newValue) } 
} 

... 
+0

で文字列リテラルを回避する方法である、あなたは驚かれることでしょう;-) –

+0

@danあなたはスウィフト3を使用していることを確認しています?デフォルトの '#function'パラメータは関数名に展開されます。これは' coolFeatureEnabled'または 'anotherFeatureEnabled'です。 setterやgetterに 'print(key);'を挿入することで簡単にチェックすることができます –

+1

@dan実際にはデフォルトのパラメータとして使用されるときに '#function' [関数が(https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Expressions.html#//apple_ref/doc/uid/TP40014097-CH32-ID389) - この例では、 '' coolFeatureEnabled''または '' anotherFeatureEnabled''の名前です。 – Hamish

関連する問題