将 UserDefaults 移动到数组
Moving UserDefaults to an array
我 运行 在尝试将用户默认数组移动到第二个数组时遇到问题,因此我可以将它加载到 table 视图中。
我的 userdefault 只是一个 Int 类型的字段。我能够将数据存储在 UD 中,当我显示它时它会显示可选值:
[176, 177]
我在视图的顶层声明了以下内容:
let defaults = UserDefaults.standard
var intArray = [[Int:Any]]()
在 viewDidLoad 中我有以下内容:
override func viewDidLoad() {
super.viewDidLoad()
intArray = defaults.array(forKey: "Favorites") as? [[Int: Any]] ?? []
print(defaults.array(forKey: "Favorites"))
}
intArray 始终为空,但当我打印 Favorites UserDefault 时,它会像上面那样显示。
显然,我在这里做错了;任何帮助将不胜感激。
将值存储到用户默认值
UserDefaults.standard.set([1, 2, 3], forKey: "TestArrayUD")
print(UserDefaults.standard.array(forKey: "TestArrayUD")) // Give Optional array eg: Optional([1, 2, 3])
读取无可选值
一种方法是使用 UserDefaults.standard.array
,如下例所示
if let _intArray = UserDefaults.standard.array(forKey: "TestArrayUD") {
print(_intArray) // Eg: [1, 2, 3]
}
您可以使用像这样方便的扩展来简化对 UserDefaults
的读取和写入。
import Foundation
extension UserDefaults {
var favorites: [Int] {
get { self.array(forKey: #function) as? [Int] ?? [] }
set { self.set(newValue, forKey: #function) }
}
}
如果您的应用中存储了旧数据并且您不想删除它,您可以简单地用您的密钥替换上面 get
/ set
中的 #function
"Favorites"
.
以下是您如何使用上述存储空间 -
let defaults = UserDefaults.standard
defaults.favorites = [1,2,3,4,5] // save
let favorites = defaults.favorites // read
print(favorites) // [1, 2, 3, 4, 5]
现在,您正在尝试解码以 Int
作为键并以 Any
作为值的字典数组(外括号组是数组,内括号是:
是 Dictionary
).
如果您将所有出现的 [[Int:Array]]
替换为 [Int]
,您的代码将有效。
我 运行 在尝试将用户默认数组移动到第二个数组时遇到问题,因此我可以将它加载到 table 视图中。
我的 userdefault 只是一个 Int 类型的字段。我能够将数据存储在 UD 中,当我显示它时它会显示可选值:
[176, 177]
我在视图的顶层声明了以下内容:
let defaults = UserDefaults.standard
var intArray = [[Int:Any]]()
在 viewDidLoad 中我有以下内容:
override func viewDidLoad() {
super.viewDidLoad()
intArray = defaults.array(forKey: "Favorites") as? [[Int: Any]] ?? []
print(defaults.array(forKey: "Favorites"))
}
intArray 始终为空,但当我打印 Favorites UserDefault 时,它会像上面那样显示。
显然,我在这里做错了;任何帮助将不胜感激。
将值存储到用户默认值
UserDefaults.standard.set([1, 2, 3], forKey: "TestArrayUD")
print(UserDefaults.standard.array(forKey: "TestArrayUD")) // Give Optional array eg: Optional([1, 2, 3])
读取无可选值
一种方法是使用 UserDefaults.standard.array
,如下例所示
if let _intArray = UserDefaults.standard.array(forKey: "TestArrayUD") {
print(_intArray) // Eg: [1, 2, 3]
}
您可以使用像这样方便的扩展来简化对 UserDefaults
的读取和写入。
import Foundation
extension UserDefaults {
var favorites: [Int] {
get { self.array(forKey: #function) as? [Int] ?? [] }
set { self.set(newValue, forKey: #function) }
}
}
如果您的应用中存储了旧数据并且您不想删除它,您可以简单地用您的密钥替换上面 get
/ set
中的 #function
"Favorites"
.
以下是您如何使用上述存储空间 -
let defaults = UserDefaults.standard
defaults.favorites = [1,2,3,4,5] // save
let favorites = defaults.favorites // read
print(favorites) // [1, 2, 3, 4, 5]
现在,您正在尝试解码以 Int
作为键并以 Any
作为值的字典数组(外括号组是数组,内括号是:
是 Dictionary
).
如果您将所有出现的 [[Int:Array]]
替换为 [Int]
,您的代码将有效。