不需要任何选项。很简单:
let dayOfWeek = Calendar.current.component(.weekday, from: row.date)
注意,flatMap 在这里不相关,因为row.date 不是可选的。但即使是这样,值得注意的是Optional 方法flatMap 的名称并没有改变。它仍然是flatMap。仅此名称的Sequence 方法已更改为compactMap。
见Swift Evolution 0187: Introduce Sequence.compactMap(_:)
所以,这仍然是flatMap:
let foo: Int? = 42
let bar: String? = foo.flatMap { i -> String in
return "The value is \(i)"
}
// Optional("The value is 42")
注意,返回值是可选的String?。在您的示例中,您似乎正在尝试使用 flatMap 来解开您的可选项,但这不是 flatMap 的用途。如果它可以解开foo,则调用闭包,但如果不能解开,则返回nil。所以它只是返回另一个可选的(在我上面的例子中是String?)。
在 Swift 4.1 中已重命名为 compactMap 的 flatMap 是 Sequence 格式:
let baz = ["1", "2", "x", "3"]
let qux: [Int] = baz.compactMap { string -> Int? in
return Int(string) // return integer value if it could convert it, return `nil` if not
}
// [1, 2, 3]
为了让它更加混乱,flatMap 仍然与序列一起使用:
let letters = ["a", "b", "c"]
let quux = letters.map { Array(repeating: $0, count: 3) }
// [["a", "a", "a"], ["b", "b", "b"], ["c", "c", "c"]]
let quuz = letters.flatMap { Array(repeating: $0, count: 3) }
// ["a", "a", "a", "b", "b", "b", "c", "c", "c"]