[英]How do I convert objective-c `sortedArrayUsingSelector:NSSelectorFromString` to swift?
我试图将 objective-c code to
swift and got stuck on this line of
Objective-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:))
无法将“选择器”类型的值转换为预期的参数类型“(任何,任何)抛出 - > 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
文件中添加了 function ,这样它就可以在swift
中使用:
-(NSComparisonResult)nameOfContactCompare:(Contact*)c;
旧的objective-c
代码有效:
NSArray *array = [[[InternalContactsHandler sharedBuffer] contacts] sortedArrayUsingSelector:NSSelectorFromString(@"nameOfContactCompare")];
为什么不是 swift?
您可以像这样按属性对数组进行排序:
yourArray = yourArray.sort({ $0.yourString.lowercased() < $1.yourString.lowercased() })
.lowercased() 是为了确保不考虑区分大小写。
将NSSelectorFromString("string")
替换为#selector(string)
或#selector(SomeClass.string)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.