从UserDefaults获得的布尔值,即使保存为Any,也会打印为0或1

时间:2017-09-23 13:17:59

标签: swift nsuserdefaults userdefaults

我正在将类型[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

1 个答案:

答案 0 :(得分:1)

这是正常的。

当对象保存到UserDefaults时,任何数值都会桥接到NSNumber,而true中的falseNSNumber的表示形式为{{1} }和1

您可以使用

返回真实0true
false