Optional的map和flatMap
var num1: Int? = 10
var num2 = num1.map { $0 * 2 }
var num3: Int? = nil
var num4 = num3.map { $0 * 2 }
var num1: Int? = 10
var num2 = num1.map { Opional.some($0 *2) }
var num3 = num1.flatMap { Optional.some($0 *2) }
var num1: Int? = 10
var num2 = (num1 != null) ? (num1! + 10) : nil
var num3 = num1.map{ $0 + 10 }
var fmt = DateFormatter()
fmt.dateFormat = "yyyy-MM-dd"
var str: String? = "2011-09-10"
var date1 = str != nil ? fmt.date(from: str!) : nil
var date2 = str.flatMap{ fmt.date(from: $0) }
var date3 = str.flatMap(fmt.date)
var score: Int? = 98
var str1 = score != nil ? "score is \(score!)" : "No score"
var str2 = score.map { "score is \($0)" } ?? "No score"
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)
]
func getPerson1(_ name: String) -> Person? {
let index = items.firstIndex { $0.name == name }
return index != nil ? items[index!] : nil
}
func getPerson2(_ name: Stirng) -> Person? {
return item.firstIdnex { $0.name = name }.map { items[$0] }
}
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]
var p1 = json != nil ? Person(json!) : nil
var p2 = json.flatMap(Person.init)