다른 속성 값으로 사용자 지정 구조 배열을 쉽게 정렬하려고합니다.Swift에서 다른 속성 값으로 사용자 정의 개체 정렬
struct Customer: Comparable, Equatable {
var name: String
var isActive: Bool
var outstandingAmount: Int
var customerGroup: String
}
var customerlist: [Customer] // This is downloaded from our backend.
사용자가 다양한 아이콘을 선택하면 모든 필드 값으로 UI의 고객 목록 배열을 정렬 할 수 있기를 원합니다.
switch 문을 사용하여 정렬하는 몇 가지 방법을 시도했지만 - 올바른 방법은 Sort Descriptors (Objective-C 기반으로 표시되며 배열을 변환해야 함)를 사용한다고 말합니다. NSArray.) 네이티브 스위프트 구조체를 사용하여이 방법을 시도하면 오류가 계속 발생합니다.
사용자가 Swift를 사용하여 위의 배열을 정렬 할 수있게하는 가장 좋은 방법은 무엇입니까?
예 : 아래가 매우 장황하게 보인다!
func sortCustomers(sortField:ColumnOrder, targetArray:[Customer]) -> [Customer] { //Column Order is the enum where I have specified the different possible sort orders
var result = [Customer]()
switch sortField {
case .name:
result = targetArray.sorted(by: { (cust0: Customer, cust1: Customer) -> Bool in
return cust0.name > cust1.name
})
case .isActive:
result = targetArray.sorted(by: { (cust0: Customer, cust1: Customer) -> Bool in
return cust0.isActive > cust1.isActive
})
case .outstandingAmount:
result = targetArray.sorted(by: { (cust0: Customer, cust1: Customer) -> Bool in
return cust0.outstandingAmount > cust1.outstandingAmount
})
case .customerGroup:
result = targetArray.sorted(by: { (cust0: Customer, cust1: Customer) -> Bool in
return cust0.customerGroup > cust1.customerGroup
})
}
return result
}
당신은 (그들에게 이름을주는 대신 위치 인수를 사용하여 클로저를 단순화 할 수 있습니다 예를 들어, 경우 1 :.'targetArray.sorted을 {$ 0.name> $ 0.name}') –
Sort Descriptors가 올바른 접근 방식이라고 생각합니다. -하지만 작동하지 않는 것 같습니다 –