Я хотел бы написать расширение для Array
, которое безопасно возвращает развернутую версию.Unwrap Sparse Array in Swift
я могу сделать это с общим способом, как так:
func unwrapElements<T>(array: [T?]) -> [T] {
let filtered: [T?] = array.filter{ $0 != nil }
let unwrapped: [T] = filtered.map { $0! }
return unwrapped
}
И я могу назвать это так:
let sparseNames: [String?] = ["alice", "bob", nil, "doug", nil, nil, "george", "hubert"]
let names: [String] = unwrapElements(sparseNames)
где names
заканчивается время ["alice", "bob", "doug", "george", "hubert"]
и безопасно итерацию и работа с каждым элементом.
Однако, я хочу назвать это так:
let names = sparseNames.unwrapElements()
Я видел несколько подобных вопросов (like this one), но они не решают, как создать метод в качестве расширения.
(это помечены Xcode6.1, чтобы обозначить версию Swift я использую)
Примечание: Swift 1.2 Beta 3 ввел функцию, которая помогает flatMap
с массивами, необязательно Chaining , См. Это отлично blog post here
well boo. Этот [вопрос] (http://stackoverflow.com/questions/25064644/how-to-determine-if-a-generic-is-an-optional-in-swift), казалось, указывал, что может быть способ сделать это , –