以 Swift 的方式思考,第二部分:调用数组的 Map 方法
在本系列文章的第一篇中,我们知道了怎样避免对可选类型强制拆包,尽量少使用
本系列文章的第一篇里这是我们上次留下的代码。 class ListItem {
var icon: UIImage?
var title: String = ""
var url: NSURL!
static func listItemsFromJSONData(jsonData: NSData?) -> [ListItem] {
guard let nonNilJsonData = jsonData,let json = try? NSJSONSerialization.JSONObjectWithData(nonNilJsonData,options: []),let jsonItems = json as? Array<NSDictionary>
else {
// If we failed to unserialize the JSON or that JSON wasn't an NSArray,
// then bail early with an empty array
return []
}
var items = [ListItem]()
for itemDesc in jsonItems {
let item = ListItem()
if let icon = itemDesc["icon"] as? String {
item.icon = UIImage(named: icon)
}
if let title = itemDesc["title"] as? String {
item.title = title
}
if let urlString = itemDesc["url"] as? String,let url = NSURL(string: urlString) {
item.url = url
}
items.append(item)
}
return items
}
}
我们的目的是使用更多更 “Swift” 的模式和语法来让我们的代码变得更简洁。 map()函数的介绍
在我们例子里,我们不再像之前一样用 return jsonItems.map { (itemDesc: NSDictionary) -> ListItem in
let item = ListItem()
if let icon = itemDesc["icon"] as? String {
item.icon = UIImage(named: icon)
}
if let title = itemDesc["title"] as? String {
item.title = title
}
if let urlString = itemDesc["url"] as? String,let url = NSURL(string: urlString) {
item.url = url
}
return item
}
这看起来只是个很小的改变,但是它让我们可以专注于怎样把 错误数据我们还有个问题要解决,就是,即便输入的数据是不可用的,我们还是创建了一个 更糟的是,代码允许我们创建那些没有可用 为了解决这个问题,如果我们接收到的输入是不可用的,就要返回一个 return jsonItems.map { (itemDesc: NSDictionary) -> ListItem? in
guard …/* condition for valid data */… else { return nil }
let realValidItem = ListItem()
… /* fill the ListItem with the values */
return realValidItem
}
但是我们现在 使用flatMap()这个时候就轮到
在语法上,你可以这么理解, 如果使用了这个方法,代码就会变成这个样子: return jsonItems.flatMap { (itemDesc: NSDictionary) -> ListItem? in
guard let title = itemDesc["title"] as? String,let urlString = itemDesc["url"] as? String,let url = NSURL(string: urlString)
else { return nil }
let li = ListItem()
if let icon = itemDesc["icon"] as? String {
li.icon = UIImage(named: icon)
}
li.title = title
li.url = url
return li
}
现在我们只返回所有键都存在的 这样做就更好更安全了吧,我们解决了错误输入数据和得到无内容实例的问题。 结论我们仍然有很多工作要做,但是今天就先做这些吧(让我们为本系列文章的下一篇准备一下材料!) 在这篇文章里面,我们学到了怎么用 在下一篇文章里,我们将学到把我们的 同时,我们希望你花点时间来深入了解一下 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |