繁体   English   中英

如何将 objective-c `sortedArrayUsingSelector:NSSelectorFromString` 转换为 swift?

[英]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)

我们如何在 swift 中使用 NSSelectorFromString?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM