Với Swift 3, bạn có thể chọn một trong những cách sau để giải quyết vấn đề của mình.
1. Sử dụng sorted(by:)
với một Movie
lớp không phù hợp với Comparable
giao thức
Nếu Movie
lớp của bạn không tuân thủ Comparable
giao thức, bạn phải chỉ định trong bao đóng thuộc tính mà bạn muốn sử dụng sorted(by:)
phương thức Array .
Movie
khai báo lớp:
import Foundation
class Movie: CustomStringConvertible {
let name: String
var date: Date
var description: String { return name }
init(name: String, date: Date = Date()) {
self.name = name
self.date = date
}
}
Sử dụng:
let avatarMovie = Movie(name: "Avatar")
let titanicMovie = Movie(name: "Titanic")
let piranhaMovie = Movie(name: "Piranha II: The Spawning")
let movies = [avatarMovie, titanicMovie, piranhaMovie]
let sortedMovies = movies.sorted(by: { $0.name < $1.name })
// let sortedMovies = movies.sorted { $0.name < $1.name } // also works
print(sortedMovies)
/*
prints: [Avatar, Piranha II: The Spawning, Titanic]
*/
2. Sử dụng sorted(by:)
với một Movie
lớp phù hợp với Comparable
giao thức
Tuy nhiên, bằng cách làm cho Movie
lớp của bạn tuân thủ Comparable
giao thức, bạn có thể có một mã ngắn gọn khi bạn muốn sử dụng sorted(by:)
phương thức của Array .
Movie
khai báo lớp:
import Foundation
class Movie: CustomStringConvertible, Comparable {
let name: String
var date: Date
var description: String { return name }
init(name: String, date: Date = Date()) {
self.name = name
self.date = date
}
static func ==(lhs: Movie, rhs: Movie) -> Bool {
return lhs.name == rhs.name
}
static func <(lhs: Movie, rhs: Movie) -> Bool {
return lhs.name < rhs.name
}
}
Sử dụng:
let avatarMovie = Movie(name: "Avatar")
let titanicMovie = Movie(name: "Titanic")
let piranhaMovie = Movie(name: "Piranha II: The Spawning")
let movies = [avatarMovie, titanicMovie, piranhaMovie]
let sortedMovies = movies.sorted(by: { $0 < $1 })
// let sortedMovies = movies.sorted { $0 < $1 } // also works
// let sortedMovies = movies.sorted(by: <) // also works
print(sortedMovies)
/*
prints: [Avatar, Piranha II: The Spawning, Titanic]
*/
3. Sử dụng sorted()
với một Movie
lớp phù hợp với Comparable
giao thức
Bằng cách làm cho Movie
lớp của bạn tuân thủ Comparable
giao thức, bạn có thể sử dụng sorted()
phương thức của Array để thay thế sorted(by:)
.
Movie
khai báo lớp:
import Foundation
class Movie: CustomStringConvertible, Comparable {
let name: String
var date: Date
var description: String { return name }
init(name: String, date: Date = Date()) {
self.name = name
self.date = date
}
static func ==(lhs: Movie, rhs: Movie) -> Bool {
return lhs.name == rhs.name
}
static func <(lhs: Movie, rhs: Movie) -> Bool {
return lhs.name < rhs.name
}
}
Sử dụng:
let avatarMovie = Movie(name: "Avatar")
let titanicMovie = Movie(name: "Titanic")
let piranhaMovie = Movie(name: "Piranha II: The Spawning")
let movies = [avatarMovie, titanicMovie, piranhaMovie]
let sortedMovies = movies.sorted()
print(sortedMovies)
/*
prints: [Avatar, Piranha II: The Spawning, Titanic]
*/