ด้วย 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)