Ios Swift 2.2字符串文字选择器

Ios Swift 2.2字符串文字选择器,ios,swift,cocoa,uilocalizedcollation,Ios,Swift,Cocoa,Uilocalizedcollation,在更新I之前,此代码运行良好: var alphabetizedArray = [[Person]]() let collation = UILocalizedIndexedCollation() for person : Person in ContactsManager.sharedManager.contactList { var index = 0 if ContactsManager.sharedManager.sortOrder =

在更新I之前,此代码运行良好:

var alphabetizedArray = [[Person]]()

    let collation = UILocalizedIndexedCollation()

    for person : Person in ContactsManager.sharedManager.contactList {
        var index = 0
        if ContactsManager.sharedManager.sortOrder == .FamilyName {
            index = collation.sectionForObject(person, collationStringSelector: "lastName")
        }
        else {
            index = collation.sectionForObject(person, collationStringSelector: "firstName")
        }
        alphabetizedArray.addObject(person, toSubarrayAtIndex: index)
    }
但是现在,由于字符串文本选择器不再存在,代码中断了

我试图将字符串文字选择器更改为SelectorlastName,但“index”始终返回为-1。我看不到任何解决办法

此排序方法采用给定对象的属性名称。Person类实际上具有这些属性lastName,firstName


但是我怎样才能重新得到这份工作呢?对选择器的实验并没有给我任何结果:“选择器”的参数并没有指向初始值设定项或方法”,它说。难怪因为这个sectionForObject,collationStringSelector:不接受任何方法,只接受一个属性名

要首先解决您的问题,请阅读Swift2.2中有关选择器的新文档


示例:使用selectorCLASS.lastName而不是SelectorlastName。其中类是包含此方法的实际类。

要解决您的问题,请首先阅读Swift2.2中有关选择器的新文档


示例:使用selectorCLASS.lastName而不是SelectorlastName。其中类是包含此方法的实际类。

这似乎是几个问题的组合:

必须使用UILocalizedIndexedCollation.currentCollation创建排序规则。 对象类需要一个返回字符串的实例方法。 选择器必须引用该实例方法,包括两个选择器。和选择器。可以使用。 下面是一个自包含的示例,它似乎如预期的那样工作:

class Person : NSObject {
    let firstName : String
    let lastName : String

    init(firstName : String, lastName : String) {
        self.firstName = firstName
        self.lastName = lastName
    }

    func lastNameMethod() -> String {
        return lastName
    }
}
然后

let person = Person(firstName: "John", lastName: "Doe")
let collation = UILocalizedIndexedCollation.currentCollation()
let section = collation.sectionForObject(person, collationStringSelector: #selector(Person.lastNameMethod))
print(section) // 3

在这里,selectorPerson.lastNameMethod和selectorPerson.lastNameMethod都可以使用。

这似乎是几个问题的组合:

必须使用UILocalizedIndexedCollation.currentCollation创建排序规则。 对象类需要一个返回字符串的实例方法。 选择器必须引用该实例方法,包括两个选择器。和选择器。可以使用。 下面是一个自包含的示例,它似乎如预期的那样工作:

class Person : NSObject {
    let firstName : String
    let lastName : String

    init(firstName : String, lastName : String) {
        self.firstName = firstName
        self.lastName = lastName
    }

    func lastNameMethod() -> String {
        return lastName
    }
}
然后

let person = Person(firstName: "John", lastName: "Doe")
let collation = UILocalizedIndexedCollation.currentCollation()
let section = collation.sectionForObject(person, collationStringSelector: #selector(Person.lastNameMethod))
print(section) // 3

在这里,selectorPerson.lastNameMethod和selectorPerson.lastNameMethod都可以使用。

我也尝试过。我得到的结果是:实例成员“lastName”不能用于类型“Person”。我也试过了。我得到的是:实例成员'lastName'不能用于'Person'类型。matt的一个也是一个很好的读物:我已经看到了,但我看不出它对我的情况有什么帮助。在我的例子中,我不需要方法作为选择器,而是需要用于某种排序的属性名。不管我用什么语法写这个选择器,这不起作用,因为新语法需要现有的方法名称,而不是字符串文本。但是需要一个选择器,该选择器标识一个方法,该方法返回排序规则中使用的对象的标识字符串,因此使用Module.Class.method应该可以在类中工作。您可能需要一个返回属性的方法,而不是仅仅尝试要将该属性与新语法一起使用?不确定。我在Person类func lastNameString->String{return lastName}中编写了一个测试func,并将选择器更改为selectorPerson.lastNameString。但现在我已经崩溃,错误无法识别的选择器发送到实例。这是个谜。你试过Module.Class.method而不是Class.method吗?只是猜测而已。确实有些神秘。如果你真的找不到这个具体问题的解决方案,我会重新打开它。马特的一本书也是一本很好的读物:我看到了,但我看不出它对我的情况有什么帮助。在我的例子中,我不需要方法作为选择器,而是需要用于某种排序的属性名。不管我用什么语法写这个选择器,这不起作用,因为新语法需要现有的方法名称,而不是字符串文本。但是需要一个选择器,该选择器标识一个方法,该方法返回排序规则中使用的对象的标识字符串,因此使用Module.Class.method应该可以在类中工作。您可能需要一个返回属性的方法,而不是仅仅尝试要将该属性与新语法一起使用?不确定。我在Person类func lastNameString->String{return lastName}中编写了一个测试func,并将选择器更改为selectorPerson.lastNameString。但现在我已经崩溃,错误无法识别的选择器发送到实例。这是个谜。你试过Module.Class.method而不是Class.method吗?只是猜测而已。确实有些神秘。如果你真的找不到这个特定问题的解决方案,我会重新打开它。触感很好!谢谢!但我仍然认为,苹果在快速发展的过程中扭转了错误的方向,出现了这种混乱局面!谢谢!但我仍然认为,苹果公司在这种混乱的局面下,在快速发展中走错了方向。