Логическое значение, полученное при печати UserDefaults как 0 или 1, даже при сохранении как Any

Я сохраняю словарь типа [String : Any] в UserDefaults,

Когда я распечатываю словарь перед сохранением в UserDefaults, логическое значение из словаря печатается как true или false, однако, когда я извлекаю словарь, оно распечатывается как 0 или 1.

Я видел похожие вопросы SO, в которых совет было использовать Any вместо AnyObject, что я сделал.

Ниже приведен код, который я использую, пожалуйста, посоветуйте, где я ошибаюсь.

static var profileDetails : [String: Any]{
    get{
        let defaults        = UserDefaults.standard
        let profileDetailsDict  = defaults.object(forKey: "profileDetails") as? [String: Any] ?? [String : Any]()
        print("Get profileDetailsDict : \(profileDetailsDict), type: \(type(of: profileDetailsDict))")
        return profileDetailsDict
    }
    set (profileDetailsDict){
        let defaults        = UserDefaults.standard

        print("Set profileDetailsDict: \(profileDetailsDict)")
        defaults.set(profileDetailsDict, forKey: "profileDetails")
    }
}


let profileDetailsDict = ["availabilityTimesDict": ["Saturday": ["times": [["startTime": 9:00 AM, "endTime": 1:30 PM], ["startTime": 2:30 PM, "endTime": 6:00 PM]], "weekday": Saturday, "available": true], "Tuesday": ["times": [["startTime": 2:30 PM, "endTime": 6:00 PM]], "weekday": Tuesday, "available": true]], "mobileNumber": "8458465845", "namesArray": ["name1", "name2"]] as [String: Any]


// Setting profileDetailsDict
profileDetails =  profileDetailsDict

// Retrieving profileDetailsDict
let userDetails = profileDetails

person SpaceX    schedule 23.09.2017    source источник


Ответы (1)


Это нормально.

Когда объект сохраняется в UserDefaults, любое числовое значение соединяется с NSNumber, а представление true и false в NSNumber - это 1 и 0.

Вы получите настоящие true и false обратно с

dict["available"] as! Bool
person vadian    schedule 23.09.2017