我在根字典中有以下 plist 条目:
我已经将它加载到可变字典中:
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] = "Homer"的项目
我试过:
for i in 0..<TabRecord.count {
filter(TabRecordID) {TabRecord[i][0] = "Homer"}
}
但是因为 TabRecordID 是 AnyObject,Swift 回复:
Generic parameter 'S' cannot be bound to non-@objc protocol type 'AnyObject'
我尝试:
let filteredArray = TabRecordID[i].filter() { TabRecordID[i][0] == "Homer"}
但是得到:
'AnyObject' does not have a member named 'filter'
我尝试:
let filteredArray = (TabRecordID[i] as! Array).filter() { TabRecordID[i][0] == "Homer"}
但是得到:
Cannot invoke 'filter' with an argument list of type '(() -> _)'
我知道我在这里遗漏了一些关于 Swift 中类型转换的基本知识,但它让我精神错乱,我在这里找不到适用的相关问题。帮助一个新手,某人,并告诉我我的方法的错误。客气点,我真的很努力...
最佳答案
试试这个
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
)]
只是举个例子,你可以在实际情况下使用可选的展开
关于ios - 在 Swift 中过滤 AnyObject[ ],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31336793/