为什么我不能打开 UserDefault 类型的字符串? [Swift 3.0 - Xcode 8]
Why cant I unwrap a UserDefault type string? [Swift 3.0 - Xcode 8]
我已将委托发回的数据存储为用户默认值,我正在尝试准备它以在 segue 中发送。我可以在 segue 中发送它,我遇到的问题是数据以 "optional[Data]"
的形式出现我知道可选的意思,但它不允许我像可选的那样解包 UserDefault它说它是可选的?
代码如下:
func DataToPass(ArrayName: [String]) {
print("Check ArrayContent--->",ArrayName)
var DCollect = [String]()
var CCollect = [String]()
DCollect.append(ArrayName[0])
CCollect.append(ArrayName[1])
let defaults = UserDefaults.standard
if let unwrap = defaults{
unwrap.set(DCollect, forKey: "DCollect")
unwrap.set(CCollect, forKey: "CCollect")
}
}
错误是:
"Initializer for conditional binding must have Optional type, not
'UserDefaults'" on line if let unwrap = defaults{
为什么我不能这样打开它?
另一次尝试:
func DataToPass(ArrayName: [String]) {
print("Check",ArrayName)
UserDefaults.standard.set(ArrayName, forKey: "ToCollect")
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?){
if segue.identifier == "SegueInfo"{
let firstController = segue.destination as! ViewController
if let Tosend = UserDefaults.standard.value(forKey:
"ToCollect") as? String {
Collect.append(Tosend)
}
firstController.AllData = Collect
}
这样没有追加,tosend是空的?
为什么它告诉我无法解包 UserDefaults?
错误消息试图向您解释 UserDefaults.standard
不是 Optional
类型。这意味着它不是 Optional<UserDefaults>
类型,这意味着它不能使用 if-let
语句来解包它。
您要解包的不是 UserDefaults
对象,它已经通过 UserDefaults.standard
属性 作为单例提供。
我可以打开什么?
您要解包的是您要检索的变量。
这些将是您必须处理的可选类型。它是 Optional
因为它可能已经存在于 UserDefaults
中,也可能还不存在。
如何检索存储在 UserDefaults
中的字符串数组?
使用密钥 DCollect
,使用适当的方法(即 stringArray(forKey:)
检索它。
let defaults = UserDefaults.standard
if let dcollect = defaults.stringArray(forKey: "DCollect") {
// it already exists; now use the dcollect variable
} else {
// it does not exist; do something (i.e. add dcollect value?) if it does not exist yet
}
如何将字符串数组存储到 UserDefaults
?
let defaults = UserDefaults.standard
let value : [String] = ["My", "Very", "Eager", "Pluto"]
standard.set(value, forKey: "DCollect")
要将某些内容保存为用户默认值:
UserDefaults.standard.set("It is a string", forKey: "meaningfulIdentifier")
从用户默认值中获取一些东西:
if let anyString = UserDefaults.standard.value(forKey: "meaningfulIdentifier") as? String {
// Do something with anyString
}
当您处理从用户默认设置中获取某些内容时,您只需要可选绑定。对于数据部分,您需要此可选绑定,而不是 User Defaults
本身。
我不确定您为什么要解包 UserDefaults.standard
,因为您不需要这样做。它不是可选的,因此您会从 Xcode.
得到错误
您可以像这样直接将值添加到 de UserDefaults 中:
let u = UserDefaults.standard
u.set(["a", "b", "c"], forKey: "yourKey")
首先,别忘了import Foundation
然后试试这个代码
func DataToPass(ArrayName: [String]) {
UserDefaults.standard.set(ArrayName, forKey: "ToCollect")
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?){
if segue.identifier == "SegueInfo"{
let firstController = segue.destination as! ViewController
if let Tosend = UserDefaults.standard.stringArray(forKey: "ToCollect") as? [String] {
Collect += Tosend
}
firstController.AllData = Collect
}
}
我已将委托发回的数据存储为用户默认值,我正在尝试准备它以在 segue 中发送。我可以在 segue 中发送它,我遇到的问题是数据以 "optional[Data]"
的形式出现我知道可选的意思,但它不允许我像可选的那样解包 UserDefault它说它是可选的?
代码如下:
func DataToPass(ArrayName: [String]) {
print("Check ArrayContent--->",ArrayName)
var DCollect = [String]()
var CCollect = [String]()
DCollect.append(ArrayName[0])
CCollect.append(ArrayName[1])
let defaults = UserDefaults.standard
if let unwrap = defaults{
unwrap.set(DCollect, forKey: "DCollect")
unwrap.set(CCollect, forKey: "CCollect")
}
}
错误是:
"Initializer for conditional binding must have Optional type, not 'UserDefaults'" on line
if let unwrap = defaults{
为什么我不能这样打开它?
另一次尝试:
func DataToPass(ArrayName: [String]) {
print("Check",ArrayName)
UserDefaults.standard.set(ArrayName, forKey: "ToCollect")
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?){
if segue.identifier == "SegueInfo"{
let firstController = segue.destination as! ViewController
if let Tosend = UserDefaults.standard.value(forKey:
"ToCollect") as? String {
Collect.append(Tosend)
}
firstController.AllData = Collect
}
这样没有追加,tosend是空的?
为什么它告诉我无法解包 UserDefaults?
错误消息试图向您解释 UserDefaults.standard
不是 Optional
类型。这意味着它不是 Optional<UserDefaults>
类型,这意味着它不能使用 if-let
语句来解包它。
您要解包的不是 UserDefaults
对象,它已经通过 UserDefaults.standard
属性 作为单例提供。
我可以打开什么?
您要解包的是您要检索的变量。
这些将是您必须处理的可选类型。它是 Optional
因为它可能已经存在于 UserDefaults
中,也可能还不存在。
如何检索存储在 UserDefaults
中的字符串数组?
使用密钥 DCollect
,使用适当的方法(即 stringArray(forKey:)
检索它。
let defaults = UserDefaults.standard
if let dcollect = defaults.stringArray(forKey: "DCollect") {
// it already exists; now use the dcollect variable
} else {
// it does not exist; do something (i.e. add dcollect value?) if it does not exist yet
}
如何将字符串数组存储到 UserDefaults
?
let defaults = UserDefaults.standard
let value : [String] = ["My", "Very", "Eager", "Pluto"]
standard.set(value, forKey: "DCollect")
要将某些内容保存为用户默认值:
UserDefaults.standard.set("It is a string", forKey: "meaningfulIdentifier")
从用户默认值中获取一些东西:
if let anyString = UserDefaults.standard.value(forKey: "meaningfulIdentifier") as? String {
// Do something with anyString
}
当您处理从用户默认设置中获取某些内容时,您只需要可选绑定。对于数据部分,您需要此可选绑定,而不是 User Defaults
本身。
我不确定您为什么要解包 UserDefaults.standard
,因为您不需要这样做。它不是可选的,因此您会从 Xcode.
您可以像这样直接将值添加到 de UserDefaults 中:
let u = UserDefaults.standard
u.set(["a", "b", "c"], forKey: "yourKey")
首先,别忘了import Foundation
然后试试这个代码
func DataToPass(ArrayName: [String]) {
UserDefaults.standard.set(ArrayName, forKey: "ToCollect")
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?){
if segue.identifier == "SegueInfo"{
let firstController = segue.destination as! ViewController
if let Tosend = UserDefaults.standard.stringArray(forKey: "ToCollect") as? [String] {
Collect += Tosend
}
firstController.AllData = Collect
}
}