Ios 无法将AnyObject类型的值分配给String类型的值
我有一个函数,它返回任意对象的数组:Ios 无法将AnyObject类型的值分配给String类型的值,ios,swift,uisearchbar,uisearchdisplaycontroller,Ios,Swift,Uisearchbar,Uisearchdisplaycontroller,我有一个函数,它返回任意对象的数组: public func xmppRosterDidEndPopulating(sender: XMPPRoster?) { let jidList = OneChat.sharedInstance.xmppRosterStorage.jidsForXMPPStream(OneChat.sharedInstance.xmppStream) contacts = jidList } 我有一个数组:var contacts=[Any
public func xmppRosterDidEndPopulating(sender: XMPPRoster?) {
let jidList = OneChat.sharedInstance.xmppRosterStorage.jidsForXMPPStream(OneChat.sharedInstance.xmppStream)
contacts = jidList
}
我有一个数组:var contacts=[AnyObject]()
稍后,我想在这些值中运行搜索功能:
func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
filtered = contacts.filter({ (text) -> Bool in
let tmp: NSString = text as! NSString
let range = tmp.rangeOfString(searchText, options: NSStringCompareOptions.CaseInsensitiveSearch)
return range.location != NSNotFound
})
if(filtered.count == 0){
searchActive = false;
} else {
searchActive = true;
}
self.tableView.reloadData()
}
但它返回给我一个错误:
Cannot assign a value of type AnyObject to a value of type String
在
如何解决此问题?方法返回与输入类型相同的数组。在这种情况下,由于
联系人
是[AnyObject]
它将返回[AnyObject]
如果您只处理字符串,这里最好的方法是将联系人的声明更改为表示字符串,并将jidList转换为提供字符串数组
if let jidList = OneChat.sharedInstance.xmppRosterStorage.jidsForXMPPStream(OneChat.sharedInstance.xmppStream) as? [String] {
contacts = jidList
} else {
// handle failure to convert to string array
}
然后,过滤代码应按原样工作。什么类型是jidList
?尽量具体点,AnyObject
等同于Objective-C中的id
,未指定。它是AnyObject
typeYes,但实际上是什么?它似乎是一个字符串数组
。如果是这样,则将联系人声明为[String]()
,并按以下方式向下转换jidList
:联系人=jidList为![字符串]
。这可以解决很多问题,您可以将其改为:filteredasstring=contacts.filter({(text)->Bool in
?在这种情况下,它返回无法分配给'String'类型的不可变表达式。
谢谢,它可以工作,但问题是,如果jidList不是AnyObject,它返回nil。因此我需要作为AnyObject进行搜索。可能吗?
if let jidList = OneChat.sharedInstance.xmppRosterStorage.jidsForXMPPStream(OneChat.sharedInstance.xmppStream) as? [String] {
contacts = jidList
} else {
// handle failure to convert to string array
}