Никаких дополнительных опций не требуется. Это просто:
let dayOfWeek = Calendar.current.component(.weekday, from: row.date)
Примечание. flatMap
здесь не имеет значения, поскольку row.date
не является обязательным. Но даже если бы это было так, стоит отметить, что у метода Optional
flatMap
его имя не изменилось. Это все еще flatMap
. Только Sequence
метод этого имени был изменен на compactMap
.
См. Swift Evolution 0187: введите 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?
в моем примере выше).
flatMap
, который был переименован в compactMap
в Swift 4.1, представляет собой 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"]