json - 在 Swift 中解析 JSON 字典中的无符号整数

标签 json swift int unsigned-integer

我正在尝试编写代码来将 JSON 值(可以是 JSON 中的字符串或整数)解析为可选无符号整数(即 UInt?),容忍值丢失或不可解析 - 我只希望如果源数据包含合法的正值,结果就有一个值:

convenience init(jsonDictionary: NSDictionary) {
    ...
    var numLikesUnsigned: UInt?
    if let likesObj: AnyObject = jsonDictionary.valueForKey("likeCount") {
        let likes = "\(likesObj)"
        if let numLikesSigned = likes.toInt() {
            numLikesUnsigned = UInt(numLikesSigned)
        }
    }
    self.init(numLikesUnsigned)
}

这看起来非常笨拙。真的有这么难吗?

最佳答案

你可以简单地这样做:

var numLikesUnsigned = (jsonDictionary["likeCount"]?.integerValue).map { UInt($0) }

由于 NSStringNSNumber 都有 integerValue 属性,因此无论哪种类型,我们都可以访问 .integerValue那个。

let dict:NSDictionary = ["foo":42 , "bar":"42"]

let foo = dict["foo"]?.integerValue // -> 42 as Int?
let bar = dict["bar"]?.integerValue // -> 42 as Int?

并且,可选.map方法:

/// If `self == nil`, returns `nil`.  Otherwise, returns `f(self!)`.
func map<U>(f: (T) -> U) -> U?

你可以:

let intVal:Int? = 42
let uintVal = intVal.map { UInt($0) } // 42 as UInt?

而不是:

let intVal:Int? = 42

let uintVal:UInt?
if let iVal = intVal {
    uintVal = UInt(iVal)
}

关于json - 在 Swift 中解析 JSON 字典中的无符号整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27169659/

相关文章:

json - 在读取 json 时解释 Spark 中的时间戳字段

ruby-on-rails - will_paginate JSON 支持?

java - 在 Java 中使用 long 安全正确地设置进度条的最大值

C++:将 int 转换为 unsigned char

java - 从调用 Int 的方法返回 boolean 值

javascript - jquery - 从平面 json 创建嵌套 json

ios - 何时使用 Swift 使用 do-catch block

swift - TableView 分隔符单元格消失?

swift - Swinject 测试解决服务

swift - 日期格式 ( "yyyy-MM-dd HH:mm:ss VV") 返回 nil