ios - 在 Swift 中过滤 AnyObject[ ]

标签 ios swift

我在根字典中有以下 plist 条目:

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] = "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/

相关文章:

ios - 具有不同 IP 地址的点对点连接

swift - 等待 promise 返回

c - 将 C 结构函数自动桥接到 Swift 方法

swift - 层变换矩阵(CATransform3D 等)但带有 IBDesignable?

swift - 计算两个日期之间的差异。 swift 1.2

ios - 如何为图集生成 2x 3x 图像?

ios - UIImage 类型的值必须为 bindTo

ios - Spritekit bodyWithbodies 不起作用

ios - Swift,无法使用 'deep link' 打开第二个应用程序

ios - 快速比较 NSDates