“[NSObject]”不能转换为“[AnyObject]”
'[NSObject]' is not convertible to '[AnyObject]'
我正在尝试创建对数组进行排序并放入相应部分的表视图。我遵循了本教程:http://www.yudiz.com/creating-tableview-with-section-indexes/
即使没有数据的部分仍然出现,但我设法使第一个工作在对表视图数组进行排序的情况下。
第二个是关于解决仍然出现没有数据的部分对我不起作用的问题。
按照第二个,我无法运行因为这个错误
'[MyContact]' is not convertible to '[AnyObject]'
这是我的代码:
联系人型号:
class MyContact: NSObject {
@objc var name: String!
@objc var mobile: String!
init(name: String, mob: String) {
self.name = name
self.mobile = mob
}
}
将数组划分为已排序子类别的扩展
extension UILocalizedIndexedCollation {
func partitionObjects(array: [AnyObject], collationStringSelector: Selector) -> ([AnyObject], [String]) {
var unsortedSections = [[AnyObject]]()
for _ in self.sectionTitles {
unsortedSections.append([])
}
for item in array {
let index: Int = self.section(for: item, collationStringSelector: collationStringSelector)
unsortedSections[index].append(item)
}
var sectionTitles = [String]()
var sections = [AnyObject]()
for index in 0 ..< unsortedSections.count {
if unsortedSections[index].count > 0 {
sectionTitles.append(self.sectionTitles[index])
sections.append(self.sortedArray(from: unsortedSections[index], collationStringSelector: collationStringSelector) as AnyObject)
}
}
return (sections, sectionTitles)
}
}
数据源的元组和出错的行
let (arrayContacts, arrayTitles) = collation.partitionObjects(array: self.myContacts, collationStringSelector: #selector(getter: MyContact.name)) as! [[MyContact]]
您正在尝试将元组强制转换为数组数组。
let (arrayContacts, arrayTitles) = collation.partitionObjects(array: self.myContacts, collationStringSelector: #selector(getter: MyContact.name))
将 return 类型为 ([AnyObject], [String])
.
的元组
此外,除非您确实需要某些东西成为 class
类型,否则您不应该使用 AnyObject
。你可以这样重写:
extension UILocalizedIndexedCollation {
func partitionObjects(array: [Any], collationStringSelector: Selector) -> ([Any], [String]) {
var unsortedSections = [[Any]](repeating: [], count: self.sectionTitles.count)
for item in array {
let index = self.section(for: item, collationStringSelector: collationStringSelector)
unsortedSections[index].append(item)
}
var sectionTitles = [String]()
var sections = [Any]()
for index in 0..<unsortedSections.count {
if unsortedSections[index].isEmpty == false {
sectionTitles.append(self.sectionTitles[index])
sections.append(self.sortedArray(from: unsortedSections[index], collationStringSelector: collationStringSelector))
}
}
return (sections, sectionTitles)
}
}
这样你就可以把 MyContact
写成 struct
并且它仍然可以使用这个函数。
我正在尝试创建对数组进行排序并放入相应部分的表视图。我遵循了本教程:http://www.yudiz.com/creating-tableview-with-section-indexes/
即使没有数据的部分仍然出现,但我设法使第一个工作在对表视图数组进行排序的情况下。
第二个是关于解决仍然出现没有数据的部分对我不起作用的问题。
按照第二个,我无法运行因为这个错误
'[MyContact]' is not convertible to '[AnyObject]'
这是我的代码:
联系人型号:
class MyContact: NSObject {
@objc var name: String!
@objc var mobile: String!
init(name: String, mob: String) {
self.name = name
self.mobile = mob
}
}
将数组划分为已排序子类别的扩展
extension UILocalizedIndexedCollation {
func partitionObjects(array: [AnyObject], collationStringSelector: Selector) -> ([AnyObject], [String]) {
var unsortedSections = [[AnyObject]]()
for _ in self.sectionTitles {
unsortedSections.append([])
}
for item in array {
let index: Int = self.section(for: item, collationStringSelector: collationStringSelector)
unsortedSections[index].append(item)
}
var sectionTitles = [String]()
var sections = [AnyObject]()
for index in 0 ..< unsortedSections.count {
if unsortedSections[index].count > 0 {
sectionTitles.append(self.sectionTitles[index])
sections.append(self.sortedArray(from: unsortedSections[index], collationStringSelector: collationStringSelector) as AnyObject)
}
}
return (sections, sectionTitles)
}
}
数据源的元组和出错的行
let (arrayContacts, arrayTitles) = collation.partitionObjects(array: self.myContacts, collationStringSelector: #selector(getter: MyContact.name)) as! [[MyContact]]
您正在尝试将元组强制转换为数组数组。
let (arrayContacts, arrayTitles) = collation.partitionObjects(array: self.myContacts, collationStringSelector: #selector(getter: MyContact.name))
将 return 类型为 ([AnyObject], [String])
.
此外,除非您确实需要某些东西成为 class
类型,否则您不应该使用 AnyObject
。你可以这样重写:
extension UILocalizedIndexedCollation {
func partitionObjects(array: [Any], collationStringSelector: Selector) -> ([Any], [String]) {
var unsortedSections = [[Any]](repeating: [], count: self.sectionTitles.count)
for item in array {
let index = self.section(for: item, collationStringSelector: collationStringSelector)
unsortedSections[index].append(item)
}
var sectionTitles = [String]()
var sections = [Any]()
for index in 0..<unsortedSections.count {
if unsortedSections[index].isEmpty == false {
sectionTitles.append(self.sectionTitles[index])
sections.append(self.sortedArray(from: unsortedSections[index], collationStringSelector: collationStringSelector))
}
}
return (sections, sectionTitles)
}
}
这样你就可以把 MyContact
写成 struct
并且它仍然可以使用这个函数。