Я пытаюсь преобразовать target-c code to
swift and got stuck on this line of
jective-c` код:
NSArray *array = [[[InternalContactsHandler sharedBuffer] contacts] sortedArrayUsingSelector:NSSelectorFromString(@"string:")];
Я пытаюсь сделать что-то подобное, используя swift
:
var array = InternalContactsHandler.sharedBuffer()?.contacts()?.sorted(by: NSSelectorFromString("string"))
но я получаю следующую ошибку:
Cannot convert value of type 'Selector' to expected argument type '(Any, Any) throws -> Bool'
Не уверен, что он хочет, чтобы я бросил или как правильно написать это в коде. Есть идеи?
Редактировать Попытка использовать код #selector
приводит к тому же результату:
var tempData = InternalContactsHandler.sharedBuffer()?.contacts()?.sorted( by: #selector(Contact.nameOfContactCompare:))
Невозможно преобразовать значениетипа 'Селектор' для ожидаемого типа аргумента '(Любой, Любой) throws -> Bool'
Contacts.nameOfContactCompare
находится в objective-C
и выглядит следующим образом:
-(NSComparisonResult)nameOfContactCompare:(Contact*)c{
NSString *f1 = [firstName stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]];
NSString *l1 = [lastName stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
NSString *f2 = [c.firstName stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
NSString *l2 = [c.lastName stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
if (ABPersonGetSortOrdering() == kABPersonSortByFirstName) {
return [self sortPrio1contact1:f1 prio2c1:l1 prio3c1:company prio1c2:f2 prio2c2:l2 prio3c2:c.company];
} else {
return [self sortPrio1contact1:l1 prio2c1:f1 prio3c1:company prio1c2:l2 prio2c2:f2 prio3c2:c.company];
}
}
Я добавил функцию в файл .h
следующим образом, чтобы ее можно было использовать в swift
:
-(NSComparisonResult)nameOfContactCompare:(Contact*)c;
Старый код objective-c
работает:
NSArray *array = [[[InternalContactsHandler sharedBuffer] contacts] sortedArrayUsingSelector:NSSelectorFromString(@"nameOfContactCompare")];
Почему не для быстрого?