有人可以解释我如何在Swift3中使用UserDefaults来完成这项任务:
我想要一个变量币= 0,标签显示"硬币:0",然后有一个按钮,点击更新硬币1。
我需要将其保存为UserDefault,以便您可以关闭视图/应用并使硬币数量保持加载/能够为其添加更多内容。
先谢谢!
答案 0 :(得分:1)
使用UserDefaults时,最好将其包装在协议中并使用枚举作为键。以下是coinsCount
的枚举案例以及其他一些示例。
enum Key: String {
case coinsCount
case userId
case recentSearches
static var all: [Key] = [.coinsCount, .userId, .recentSearches]
}
protocol PersistenceManagerProtocol {
//MARK: - Delete
func deleteAll()
func deleteValue(for key: Key)
//MARK: - Inspection
func hasValue(for key: Key) -> Bool
//MARK: - Save
func save(_ value: Any, for key: Key)
//MARK: - Load
func load<Value>(with key: Key) -> Value?
func loadArray<Value>(with key: Key) -> [Value]
}
final class PersistenceManager {
fileprivate let userDefaults: UserDefaults
init(userDefaults: UserDefaults) {
self.userDefaults = userDefaults
}
}
extension PersistenceManager: PersistenceManagerProtocol {
//MARK: - Delete
func deleteValue(for key: Key) {
userDefaults.setValue(nil, forKey: key.rawValue)
}
func deleteAll() {
for key in Key.all {
deleteValue(for: key)
}
}
//MARK: - Inspection
func hasValue(for key: Key) -> Bool {
return userDefaults.value(forKey: key.rawValue) != nil
}
//MARK: - Save
func save(_ value: Any, for key: Key) {
saveValue(value, for: key)
}
//MARK: - Load
func load<Value>(with key: Key) -> Value? {
guard let value = userDefaults.value(forKey: key.rawValue) as? Value else { return nil }
return value
}
func loadArray<Value>(with key: Key) -> [Value] {
guard let array: [Value] = load(with: key) else { return [] }
return array
}
}
//USAGE
let persistenceManager: PersistenceManagerProtocol = PersistenceManager(.standard) // using dependency injection, can mock data
persistenceManager.save(237, for: .coinsCount)
let coinsCount: Int = persistenceManager.load(with: .coinsCount)
persistenceManager.save("foobar", for: .userId)
let userId: String = persistenceManager.load(with: .userId)
persistenceManager.save(["foo", "bar"], .recentSearches)
let recentSearches: [String] = persistenceManager.loadArray(with: .recentSearches)
答案 1 :(得分:0)
h, t = 1, 1
my_array = [0,1,2,3,4,5]
middle = my_array[h:-t]
答案 2 :(得分:-1)
尝试这样的事情:
let defaults = UserDefaults() //Declares user defaults
let savedCoins = defaults.integer(forKey: "userCoins") //declares a variable for your key
savedCoins += 1 //add one when your button is clicked
defaults.set(savedCoins, forKey: "userCoins") //re-saves the new value
每当您想要检索默认值中的值时:
let savedCoins = defaults.integer(forKey: "userCoins")
每当您想将值设置为默认值时:
defaults.set(savedCoins, forKey: "userCoins")
确保你的钥匙是一样的!
答案 3 :(得分:-2)
我也无法使用NSUserDefaults,我还不是Swift的专家,但我可以告诉你我对它的理解以及它对我的作用:
UserDefaults分两步进行:
第一步:您设置要保存的数据以及何时: 例如,如果您想在按下按钮的同时保存某些内容:
buttonPressed {
Userdefaults.standard.set(list,forKey:&#34; anyKeyYouWantHere&#34;) - &gt;然而,&#34;列表&#34;变量看起来 就像你按下按钮一样,它会像那样保存
}
第二步
例如,如果我想在视图加载时加载列表,在ViewDidLoad中我只给出变量&#34; list&#34;在我关闭应用程序之前支持它的值;
如此:
list = UserDefaults.standard.string(forKey:&#34; theSameKeyFromStep1&#34;)
希望这对你有意义!祝你好运!