过滤的AnyObject []斯威夫特

问题描述:

我有一个根辞典以下的plist条目:过滤的AnyObject []斯威夫特

plist entry

我装成一个可变字典:

var TabRecordKey = "TabRecord" 
var TabRecordID: AnyObject = [] 

     let resultDictionary = NSMutableDictionary(contentsOfFile: path) 
    println("Loaded DrinksData.plist file is --> \(resultDictionary?.description)") 
    var myDict = NSDictionary(contentsOfFile: path) 
    if var dict = myDict { 
     //loading values 
     TabRecordID = dict.objectForKey(TabRecordKey)! 

所有可爱,我可以将对象追加到TabRecordID,保存它们,在控制台中打印记录。

但现在我想我TabRecordID进行过滤,只显示项目,比方说,对于这TabRecord [I] [0] = “荷马史诗”

我已经试过:

for i in 0..<TabRecord.count { 
filter(TabRecordID) {TabRecord[i][0] = "Homer"} 
} 

但由于TabRecordID是AnyObject,夫特回复:

通用参数 'S' 可以不被绑定到非易失@ objc协议类型 'AnyObject'

我尝试:

let filteredArray = TabRecordID[i].filter() { TabRecordID[i][0] == "Homer"} 

但得到:

'AnyObject' 没有一个名为 '过滤器'

我尝试员:

let filteredArray = (TabRecordID[i] as! Array).filter() { TabRecordID[i][0] == "Homer"} 

但是得到:

不能援引“过滤器”类型的参数列表“(() - > _)”

我知道我失去了一些东西有关雨燕铸造基本在这里,但它的驾驶我心理,我不能在这里找到适用的相关问题。帮助一个新人,有人,并告诉我我的方式的错误。有爱心,我真的想在这里...

试试这个

let pridicate = NSPredicate(block: { (obj, dic) -> Bool in 
      let array = obj as! NSArray 
      let str = array.firstObject as! String 
      return str=="Homer" 
     }) 
     let filterdResult = TabRecordID.filteredArrayUsingPredicate(pridicate) 
     println(filterdResult) 

这将记录

[(
Home, 
Bear, 
2 
)] 

只是一个例子,你可以在实际情况下,使用可选的unwarpping

+0

Oh.My.God。你是一个巫师。现在我不得不把这些书放到为什么会奏效的地方,但是它恰恰摆脱了我期待的结果。干杯! – brianfit