Swift --- Optional的map和flatMap

Optional的map和flatMap
var num1: Int? = 10
// Optional(20)
var num2 = num1.map { $0 * 2 }
var num3: Int? = nil
// nil
var num4 = num3.map { $0 * 2 }
var num1: Int= 10
// Optional(Optional(20))
var num2 = num1.map { Opional.some($0 *2) }
// Optional(20)
var num3 = num1.flatMap { Optional.some($0 *2) }
  • 应用1:
var num1: Int? = 10
var num2 = (num1 != null) ? (num1! + 10) : nil
var num3 = num1.map{ $0 + 10 }
// num2、num3是等价的
  • 应用2:
var fmt = DateFormatter()
fmt.dateFormat = "yyyy-MM-dd"
var str: String? = "2011-09-10"
// old
var date1 = str != nil ? fmt.date(from: str!) : nil
// new
var date2 = str.flatMap{ fmt.date(from: $0) } 
// 更简便写法
var date3 = str.flatMap(fmt.date)   
  • 应用3:
var score: Int? = 98
// old
var str1 = score != nil ? "score is \(score!)" : "No score"
// new
var str2 = score.map { "score is \($0)" } ?? "No score"
  • 应用4:
struct Person {
    var name: String
    var age: Int
}
var items = [
    Person(name: "jack", age: 20)
    Person(name: "rose", age: 21)
    Person(name: "kate", age: 22)
]
// old
func getPerson1(_ name: String) -> Person? {
    let index = items.firstIndex { $0.name == name }
    return index != nil ? items[index!] : nil
}
// new 
func getPerson2(_ name: Stirng) -> Person? {
    return item.firstIdnex { $0.name = name }.map { items[$0] }
}
  • 应用5:
struct Person {
    var name: String
    var age: Int
    init?(_ json: [String: Any]) {
        guard let name = json["name"] as? String, 
              let age = json["age"] as? Int else {
                  return nil
        }
        self.name = name
       self.age = age       
    }
}
var json: Dictionary? = ["name": "jack", "age": 10]
// old
var p1 = json != nil ? Person(json!) : nil
// new
var p2 = json.flatMap(Person.init)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值