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 Movielớp không phù hợp với Comparablegiao thức
Nếu Movielớp của bạn không tuân thủ Comparablegiao 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 Movielớp phù hợp với Comparablegiao thức
Tuy nhiên, bằng cách làm cho Movielớp của bạn tuân thủ Comparablegiao 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 Movielớp phù hợp với Comparablegiao thức
Bằng cách làm cho Movielớp của bạn tuân thủ Comparablegiao 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]
*/