2
我有以下聲明:斯威夫特:清理聲明/元編程
var loginServiceUsed: String? = NSUserDefaults.standardUserDefaults().stringForKey(Constants.loginServiceUsed.rawValue) {
didSet {
NSUserDefaults.standardUserDefaults().setObject(loginServiceUsed, forKey: Constants.loginServiceUsed.rawValue)
}
}
var loginServiceToken: String? = NSUserDefaults.standardUserDefaults().stringForKey(Constants.loginServiceToken.rawValue) {
didSet {
NSUserDefaults.standardUserDefaults().setObject(loginServiceToken, forKey: Constants.loginServiceToken.rawValue)
}
}
...
重複半打倍。這種相同的模式讓我有些不安。如果我正在編寫ruby代碼,那麼我會在這裏放一些元編程,它將是一個變量名稱的數組和相關的4-5行代碼 - 我會選擇6行代碼碼。
有清理這些聲明的好方法嗎?
我很樂意以這樣一種方式來重構它,使每個聲明成爲一條線 - 是否有某種方法可以通過閉包來實現?
每個聲明*是*一行。其餘的是'didSet'屬性觀察器方法。 – nhgrif 2015-04-03 01:54:38
你有沒有把這些作爲屬性?看起來像這應該只是一個getDefault/setDefault函數使用你的常量。我會在這種情況下使用枚舉,但要麼擺脫魔術字符串。 – Nick 2015-04-04 00:02:07
我確實喜歡它們作爲屬性。我正在考慮用postfix =運算符編寫一個結構體。我認爲這將是一個優雅的解決方案。 loginServiceUsed:NSUserDefaultsBackedVariable(,key:String)。如何在不調用rawValue之類的情況下返回rawValue ... –
kwerle
2015-04-04 19:07:29