2016-11-21 8 views
-1

В моем быстром приложении я экономлю булевы значения NSUserDefaults:Почему в булевом значении Swift3 из NSUserDefaults отображается как 0 вместо «false»?

defaults.set(false, forKey: "mySwitch") 
defaults.set(true, forKey: "mySecondSwitch") 

позже, когда я построение запроса к alamofire:

var params = [ 
     "switch1": defaults.bool(forKey: "mySwitch") as AnyObject 
    ] as [String: AnyObject] 

и печати Params с print(params) Я видящим switch1 = 0. Как я могу это сделать, чтобы он был передан на сервер как switch1 = false?

Я не могу изменить структуру массива, он должен остаться [String: AnyObject]

+0

Поскольку 'Bool' не является' AnyObject'. То, что вы видите, это 'NSNumber', обертывающее логическое значение. – Alexander

ответ

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] в качестве параметра серверу работать.

0

В Swift 3 не использовать AnyObject вместо этого использовать Any.

Так изменить код, как показано ниже,

var params = [ 
     "switch1": defaults.bool(forKey: "mySwitch") as Bool 
    ] as [String: Bool] 

Или, если содержит несколько типов Params тогда как ниже,

var params = [ 
     "switch1": defaults.bool(forKey: "mySwitch") as Bool 
    ] as [String: Any] 
-3

в общем BOOL всегда быть Int, которые содержат 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