답변:
에 전달할 클로저 sort에서 정렬하려는 속성을 비교하십시오. 이처럼 :
movieArr.sorted { $0.name < $1.name }
또는 사례를 우회하려는 경우 다음을 수행하십시오.
movieArr.sorted { $0.name.lowercased() < $1.name.lowercased() }
주석 : 일반적으로 유형 만 대문자로 시작합니다. 내가 사용하는 것이 좋습니다 것 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이 문제가 해결됩니다.
sortedSwift 3에 다시 있습니다 : D.
Swift 3에서는 다음 방법 중 하나를 선택하여 문제를 해결할 수 있습니다.
sorted(by:)와 함께 사용MovieComparableMovie클래스가 Comparable프로토콜을 준수하지 않는 경우 클로저에서 Array의 sorted(by:)메서드 를 사용하려는 속성을 지정해야합니다 .
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 })
// let sortedMovies = movies.sorted { $0.name < $1.name } // also works
print(sortedMovies)
/*
prints: [Avatar, Piranha II: The Spawning, Titanic]
*/
sorted(by:)하는 Movie클래스 와 함께 사용Comparable그러나 Movie클래스가 Comparable프로토콜을 준수하도록 함으로써 Array의 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(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]
*/
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)
/*
prints: [Avatar, Piranha II: The Spawning, Titanic]
*/
movies.sorted(by: <)와 제외 movies.sorted())?
sorted(by:)및 sorted()두 가지 방법이있다. array.sorted()의 대안으로 사용할 수 있습니다 array.sorted(by: <).
sorted(by:)그리고 둘 다에 대해 동일한 클래스 정의를 가질 수 sorted()있습니까?
Comparable프로토콜 을 준수 해야하는 동일한 클래스 / 구조체 구현을 가질 수 있습니다 .
"1" "14""28""31""4""42""49"
let sortArray = array.sorted(by: { $0.name.lowercased() < $1.name.lowercased() })
*import Foundation
import CoreData
extension Messages {
@nonobjc public class func fetchRequest() -> NSFetchRequest<Messages> {
return NSFetchRequest<Messages>(entityName: "Messages")
}
@NSManaged public var text: String?
@NSManaged public var date: Date?
@NSManaged public var friends: Friends?
}
//here arrMessage is the array you can sort this array as under bellow
var arrMessages = [Messages]()
arrMessages.sort { (arrMessages1, arrMessages2) -> Bool in
arrMessages1.date! > arrMessages2.date!
}*