在我的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)
打印params我看到switch1 = 0
。我怎样才能将它转移到服务器switch1 = false
?
我无法更改数组的结构,它必须保持为[String: AnyObject]
答案 0 :(得分:1)
每当您将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)
如您所见,我在description
之前访问了as AnyObject
。输出如下所示:
["switch1": false]
显然," switch1"得到那些引号但不是false
。
请注意,我对Alamofire一无所知,因此我不知道将["switch1": false]
作为参数发送到服务器是否有效。
答案 1 :(得分:0)
在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]
答案 2 :(得分:-3)
一般来说BOOL始终是一个包含0 or 1
意味着
如果该陈述为真,它将返回1,如
if(_bool){
//its mean if _bool ==1 then execute this
}else{
//its mean if _bool ==0 then execute this
}
这是NSArray不包含int值但NSMutableArray可以包含int值的原因之一