ด้วย Swift 3 คุณสามารถเลือกหนึ่งในวิธีต่อไปนี้เพื่อแก้ปัญหาของคุณ
1. ใช้sorted(by:)กับMovieคลาสที่ไม่เป็นไปตามComparableโปรโตคอล
หากMovieคลาสของคุณไม่เป็นไปตามComparableโปรโตคอลคุณต้องระบุในการปิดคุณสมบัติที่คุณต้องการใช้sorted(by:)เมธอดของ Array
Movie การประกาศคลาส:
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
}
}
การใช้งาน:
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 })
print(sortedMovies)
2. ใช้sorted(by:)กับMovieคลาสที่สอดคล้องกับComparableโปรโตคอล
อย่างไรก็ตามการทำให้Movieคลาสของคุณเป็นไปตามComparableโปรโตคอลคุณสามารถมีโค้ดที่กระชับมากเมื่อคุณต้องการใช้sorted(by:)เมธอดของ Array
Movie การประกาศคลาส:
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
}
}
การใช้งาน:
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 })
print(sortedMovies)
3. ใช้sorted()กับMovieคลาสที่สอดคล้องกับComparableโปรโตคอล
โดยการทำให้คุณMovieระดับสอดคล้องกับComparableโปรโตคอลคุณสามารถใช้อาร์เรย์ของวิธีการเป็นทางเลือกให้กับsorted()sorted(by:)
Movie การประกาศคลาส:
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
}
}
การใช้งาน:
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)