31 lines
660 B
Swift
31 lines
660 B
Swift
//
|
|
// Reorderable.swift
|
|
// Pocket Poster
|
|
//
|
|
// Created by lemin on 6/22/25.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
protocol Reorderable {
|
|
associatedtype OrderElement: Equatable
|
|
var orderElement: OrderElement { get }
|
|
}
|
|
|
|
extension Array where Element: Reorderable {
|
|
|
|
func reorder(by preferredOrder: [Element.OrderElement]) -> [Element] {
|
|
sorted {
|
|
guard let first = preferredOrder.firstIndex(of: $0.orderElement) else {
|
|
return false
|
|
}
|
|
|
|
guard let second = preferredOrder.firstIndex(of: $1.orderElement) else {
|
|
return true
|
|
}
|
|
|
|
return first < second
|
|
}
|
|
}
|
|
}
|