В закрытии, которое вы передаете sort
, сравните свойства, по которым вы хотите отсортировать. Как это:
movieArr.sorted { $0.name < $1.name }
или следующее в случаях, которые вы хотите обойти:
movieArr.sorted { $0.name.lowercased() < $1.name.lowercased() }
Sidenote: обычно только шрифты начинаются с заглавной буквы; Я бы порекомендовал использовать name
и date
, а не Name
и Date
.
Пример, на детской площадке:
class Movie {
let name: String
var date: Int?
init(_ name: String) {
self.name = name
}
}
var movieA = Movie("A")
var movieB = Movie("B")
var movieC = Movie("C")
let movies = [movieB, movieC, movieA]
let sortedMovies = movies.sorted { $0.name < $1.name }
sortedMovies
sortedMovies
будет в порядке [movieA, movieB, movieC]
Swift5 Обновление
channelsArray = channelsArray.sorted { (channel1, channel2) -> Bool in
let channelName1 = channel1.name
let channelName2 = channel2.name
return (channelName1.localizedCaseInsensitiveCompare(channelName2) == .orderedAscending)
.lowercaseString
решит эту проблему.sorted
снова в Swift 3: D.С Swift 3 вы можете выбрать один из следующих способов решения вашей проблемы.
1. Использование
sorted(by:)
сMovie
классом, который не соответствуетComparable
протоколуЕсли ваш
Movie
класс не соответствуетComparable
протоколу, вы должны указать в своем закрытии свойство, для которого вы хотите использоватьsorted(by:)
метод Array .Movie
объявление класса:Использование:
2. Использование
sorted(by:)
сMovie
классом, который соответствуетComparable
протоколуОднако, приведя ваш
Movie
класс в соответствие сComparable
протоколом, вы можете получить очень лаконичный код, если хотите использоватьsorted(by:)
метод Array .Movie
объявление класса:Использование:
3. Использование
sorted()
сMovie
классом, который соответствуетComparable
протоколуСделав ваш
Movie
класс соответствующимComparable
протоколу, вы можете использоватьsorted()
метод Array в качестве альтернативыsorted(by:)
.Movie
объявление класса:Использование:
источник
movies.sorted(by: <)
иmovies.sorted()
)?sorted(by:)
иsorted()
два разных метода. Вы можете использоватьarray.sorted()
в качестве альтернативы дляarray.sorted(by: <)
.sorted(by:)
иsorted()
?Comparable
протоколу."1" "14""28""31""4""42""49"
источник
Для тех, кто использует Swift 3, эквивалентный метод для принятого ответа:
источник
Сортированный массив Swift 4.2
источник
источник