Nie ma potrzeby, aby uniknąć Swift Array
.
Został zmostkowany w obu kierunkach z NSArray
, więc dla bardziej bezpiecznego kodu najlepiej jest wykonywać pracę z tablicami Swift i mostem tylko wtedy, gdy jest to potrzebne do współdziałania z interfejsami API ObjC. (W większości importowanych API Swift automatycznie konwertuje NSArray
do [AnyObject]
, więc nie trzeba nawet zlikwidować bardzo często).
Zakładając tablicę persons
jest [AnyObject]
masz z innego API, można wyciąć na kwota typ odlewniczej w stosunku do innych odpowiedzi oddając tablicę pierwszy:
let sortedPersons = sorted(persons as [Person]) { $0.name < $1.name }
// sortedPersons has inferred type [Person]
Ponadto, ponieważ używasz bloku komparatora tylko do sortowania na specyficzną właściwość klasy Person
, można zrobić lepiej użyć sortowania deskryptory:
let sortedPersons = (persons as NSArray).sortedArrayUsingDescriptors([
NSSortDescriptor(key: "name", ascending: true)
])
(The persons as NSArray
część może nie być konieczne, jeśli persons
pochodził z objc API).
zależności od klasy Person
jest realizowany, sortowania z deskryptorów może produkować bardziej efektywnego sortowania na backend. Na przykład, jeśli jest to obiekt zarządzany Core Data, sortowanie za pomocą deskryptorów może wygenerować zapytanie SQL, które będzie wykonywane szybko w bazie danych i zużywa mało pamięci, natomiast sortowanie przy zamknięciu komparatora wymaga utworzenia instancji każdego obiektu z bazy danych tylko po to, aby ocenić zamknięcie względem każdego z nich. .
'NSComparisonResult' jest teraz' ComparisonResult'. – ThomasW