Селектор, который вы передаете sortedArray(from:collationStringSelector:)
, должен быть селектором типа сортируемых объектов.У вас нет свойства localizedTitle
для объектов в вашем массиве.
Обычно у вас будет массив классов или структур, которые вы хотите отсортировать, и вы передадите селектор некоторого свойства классаили struct.
Но ваш массив - это массив String
.Таким образом, вам нужно свойство String
, которое возвращает строку, которая будет использоваться для сортировки.
И так как это использование селекторов основано на старых платформах Objective-C, свойство должно быть выставлено Objective-C.
Одна вещь, которая будет работать с массивом String
, - это использование селектора NSString.description
.Это работает, потому что Swift String
может быть соединен с NSString
.
Другая вещь, которая вам нужна, это изменить тип массива с AnyObject
на тот, который на самом деле - String
.
var sections: [[String]] = []
var objects: [String] = [] {
didSet {
let selector: Selector = #selector(NSString.description)
sections = Array(repeating: [], count: collation.sectionTitles.count)
let sortedObjects = collation.sortedArray(from: objects, collationStringSelector: selector)
for object in sortedObjects {
let sectionNumber = collation.section(for: object, collationStringSelector: selector)
sections[sectionNumber].append(object)
}
self.tableView.reloadData()
}
}
override func viewDidLoad() {
super.viewDidLoad()
objects = ["One", "Two", "Three"]
}
Обновите ваш другой код, который пытается привести эти значения as String
, так как это больше не понадобится.