为什么来自NSUserDefaults的Swift3布尔值显示为0而不是" false"?

时间:2016-11-21 17:20:02

标签: ios swift swift3 nsuserdefaults

在我的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]

3 个答案:

答案 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意味着

的int

如果该陈述为真,它将返回1,如

    if(_bool){

    //its mean if _bool ==1 then execute this 
    }else{

//its mean if _bool ==0 then execute this 
}

这是NSArray不包含int值但NSMutableArray可以包含int值的原因之一