我正在尝试编写代码来将 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) }
由于 NSString
和 NSNumber
都有 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/