为什么在 Swift3 中 NSUserDefaults 的布尔值显示为 0 而不是 "false"?
Why does in Swift3 boolean value from NSUserDefaults is visible as 0 instead of "false"?
在我的 Swift 应用程序中,我将布尔值保存到 NSUserDefaults
:
defaults.set(false, forKey: "mySwitch")
defaults.set(true, forKey: "mySecondSwitch")
稍后,当我构造对 alamofire 的查询时:
var params = [
"switch1": defaults.bool(forKey: "mySwitch") as AnyObject
] as [String: AnyObject]
并使用 print(params)
打印参数我看到 switch1 = 0
。我怎样才能让它以 switch1 = false
的形式传输到服务器?
我不能改变数组的结构,它必须保持 [String: AnyObject]
每当您将 Bool
转换为 AnyObject
时,true
变为 1 而 false
变为 0。我不认为这种行为无法改变。
// prints 1
print(true as AnyObject)
我能想到的唯一解决方法是:
var params = [
"switch1": defaults.bool(forKey: "mySwitch").description as AnyObject
] as [String: AnyObject]
print(params)
如您所见,我在 as AnyObject
之前访问了 description
。输出如下所示:
["switch1": false]
显然,"switch1" 得到那些引号但 false
没有。
请注意,我对 Alamofire 一无所知,所以我不知道将 ["switch1": false]
作为参数发送到服务器是否有效。
在 Swift 3 中不要使用 AnyObject
而是使用 Any
.
所以像下面这样更改代码,
var params = [
"switch1": defaults.bool(forKey: "mySwitch") as Bool
] as [String: Bool]
或者如果包含多种类型的参数,则如下所示,
var params = [
"switch1": defaults.bool(forKey: "mySwitch") as Bool
] as [String: Any]
一般来说,BOOL 总是一个包含 0 or 1
的整数,这意味着
如果陈述属实,它将 return 1 个赞
if(_bool){
//its mean if _bool ==1 then execute this
}else{
//its mean if _bool ==0 then execute this
}
这是 NSArray 不包含 int 值但 NSMutableArray 可以包含 int 值的原因之一
在我的 Swift 应用程序中,我将布尔值保存到 NSUserDefaults
:
defaults.set(false, forKey: "mySwitch")
defaults.set(true, forKey: "mySecondSwitch")
稍后,当我构造对 alamofire 的查询时:
var params = [
"switch1": defaults.bool(forKey: "mySwitch") as AnyObject
] as [String: AnyObject]
并使用 print(params)
打印参数我看到 switch1 = 0
。我怎样才能让它以 switch1 = false
的形式传输到服务器?
我不能改变数组的结构,它必须保持 [String: AnyObject]
每当您将 Bool
转换为 AnyObject
时,true
变为 1 而 false
变为 0。我不认为这种行为无法改变。
// prints 1
print(true as AnyObject)
我能想到的唯一解决方法是:
var params = [
"switch1": defaults.bool(forKey: "mySwitch").description as AnyObject
] as [String: AnyObject]
print(params)
如您所见,我在 as AnyObject
之前访问了 description
。输出如下所示:
["switch1": false]
显然,"switch1" 得到那些引号但 false
没有。
请注意,我对 Alamofire 一无所知,所以我不知道将 ["switch1": false]
作为参数发送到服务器是否有效。
在 Swift 3 中不要使用 AnyObject
而是使用 Any
.
所以像下面这样更改代码,
var params = [
"switch1": defaults.bool(forKey: "mySwitch") as Bool
] as [String: Bool]
或者如果包含多种类型的参数,则如下所示,
var params = [
"switch1": defaults.bool(forKey: "mySwitch") as Bool
] as [String: Any]
一般来说,BOOL 总是一个包含 0 or 1
的整数,这意味着
如果陈述属实,它将 return 1 个赞
if(_bool){
//its mean if _bool ==1 then execute this
}else{
//its mean if _bool ==0 then execute this
}
这是 NSArray 不包含 int 值但 NSMutableArray 可以包含 int 值的原因之一