[英]Swift 2.2 string literal selector
在更新之前,我的代碼工作正常:
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)
}
但是現在,由於不再使用字符串文字選擇器,因此代碼中斷了。
我試圖將字符串文字選擇器更改為Selector(“ lastName”),但“索引”始終返回為-1。 而且我沒有任何解決方案。
此排序方法采用給定對象的屬性名稱。 而Person類確實具有這些屬性(lastName,firstName)。
但是我如何才能再次進行這項工作? 使用#selector進行的實驗沒有給我任何好處:它說“'#selector'的參數未引用初始化程序或方法”。 難怪因為此sectionForObject(,collationStringSelector :)除了屬性名外沒有其他方法。
這似乎是幾個問題的組合:
UILocalizedIndexedCollation.currentCollation()
創建。 String
的實例方法 。 #selector
必須引用該實例方法, #selector(<Type>.<method>)
和#selector(<instance>.<method>)
都可以使用。 這是一個自成一體的示例,似乎可以按預期工作:
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
在這里,可以同時使用#selector(Person.lastNameMethod)
和#selector(person.lastNameMethod)
。
為了首先解決您的問題,請閱讀有關Swift2.2中選擇器的新文檔。
示例:使用#selector(CLASS.lastName)
而不是Selector("lastName")
。 CLASS是包含此方法的實際類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.