簡體   English   中英

無法將類型AnyObject的值分配給字符串類型的值

[英]Cannot assign a value of type AnyObject to a value of type String

我有一個函數,該函數返回一個AnyObject數組:

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

filtered = contacts.filter({ (text) -> Bool in

我怎么解決這個問題?

filter方法返回與輸入類型相同的數組。 在這種情況下,由於contacts[AnyObject] ,它將返回[AnyObject]

如果您只處理字符串,那么最好的方法是更改contacts的聲明以表示字符串並轉換jidList以提供字符串數組...

if let jidList = OneChat.sharedInstance.xmppRosterStorage.jidsForXMPPStream(OneChat.sharedInstance.xmppStream) as? [String] {
    contacts = jidList
} else {
    // handle failure to convert to string array
}

然后,過濾代碼應按原樣工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM