Там нет необходимости, чтобы избежать Swift Array
.
Он соединен в обоих направлениях с помощью NSArray
, поэтому для более безопасного ввода кода лучше всего выполнять свою работу с массивами Swift и мостом только тогда, когда это необходимо для взаимодействия с API-интерфейсами ObjC. (И в большинстве импортируемых API-интерфейсах, Swift автоматически преобразует NSArray
в [AnyObject]
, так что вам даже не нужно преодолеть очень часто.)
Предполагая persons
массива является [AnyObject]
вы получили от других API, вы можете сократить на количество отливки типа по отношению к другим ответам литья массива первым:
let sortedPersons = sorted(persons as [Person]) { $0.name < $1.name }
// sortedPersons has inferred type [Person]
Кроме того, так как вы используете компаратор блок только для сортировки определенного свойства вашего Person
класса, вы могли бы сделать лучше использовать сорт дескрипторы:
let sortedPersons = (persons as NSArray).sortedArrayUsingDescriptors([
NSSortDescriptor(key: "name", ascending: true)
])
(The persons as NSArray
часть не может быть необходима, если persons
происходил из ObjC API.)
В зависимости от того, как реализован Person
класса, сортировка с дескрипторами может производить более эффективный вид на внутреннем интерфейсе. Например, если это управляемый объект с базовыми данными, сортировка с дескрипторами может привести к выполнению SQL-запроса, который выполняется быстро в базе данных и использует небольшую память, в то время как сортировка с закрытием компаратора требует создания экземпляра каждого объекта из базы данных только для оценки закрытия по каждому ,
'NSComparisonResult' теперь' ComparisonResult'. – ThomasW