Chcę rozszerzyć klasę Array, aby mogła wiedzieć, czy jest sortowana (rosnąco), czy nie. Chcę dodać obliczoną właściwość o nazwie isSorted
. Jak mogę określić elementy tablicy jako porównywalne?Rozszerzenie tablicy, aby sprawdzić, czy jest posortowane w Swift?
Moja obecna implementacja w Playground
extension Array {
var isSorted: Bool {
for i in 1..self.count {
if self[i-1] > self[i] { return false }
}
return true
}
}
// The way I want to get the computed property
[1, 1, 2, 3, 4, 5, 6, 7, 8].isSorted //= true
[2, 1, 3, 8, 5, 6, 7, 4, 8].isSorted //= false
BłądCould not find an overload for '>' that accepts the supplied arguments
Oczywiście nadal mam błąd, ponieważ Swift nie umie porównać elementy. Jak mogę wdrożyć to rozszerzenie w Swift? Czy robię coś złego tutaj?
możliwy duplikat [Jak wdrożyć spłaszczanie jako rozszerzenie w tablicy bez odlewania?] (Http://stackoverflow.com/questions/24564249/how-to-implement-flatten-as-an-extension-on -an-array-without-type-casting) – Sebastian
Nie można rozszerzyć 'Array', ale można zaimplementować funkcję działającą na 'Array '. Spójrz na http://stackoverflow.com/a/24565627/1489997 –
Sebastian
@Sebastian Myślę, że link, który podałeś jest zupełnie inny niż mój zamiar. Łatwo jest zrobić kategorię dla tego rodzaju rzeczy w obj-c, więc pomyślałem, że powinno być tak samo banalne w Swift. –