【问题标题】:How to remove dictionary[String:AnyObject] for array using filter function in swift?如何在swift中使用过滤器函数删除数组的字典[String:AnyObject]?
【发布时间】:2017-11-15 10:47:59
【问题描述】:
var globalCountArray = [AnyObject]()
var assetDictionary = [String:AnyObject]()
globalCountArray.append(assetDictionary as AnyObject)

如何使用 Anyobject 数组过滤字典?这个我试过了。

  globalCountArray = globalCountArray.filter {$0     as AnyObject != dict }

但我得到了错误

二元运算符'!='不能应用于'AnyObject'和'[String : AnyObject]'类型的操作数"

【问题讨论】:

  • globalCountArray.filter {$0 as? [String: AnyObject] != dict }?
  • 为什么是 AnyObject 数组?你应该指定数组的类型,如果它是一个包含字典的数组,那么它应该是 var globalCountArray: [[String: Any]] = [[:]]
  • 过滤器到底是什么意思?能具体一点吗?
  • 如果我像这样更改 globalCountArray: [[String: Any]] = [[:]] 那么我得到二元运算符'!='不能应用于'[String:Any]类型的操作数' 和 '[String : AnyObject]'

标签: ios swift


【解决方案1】:

试试这个

    var globalCountArray = [AnyObject]()
    var assetDictionary = [String:AnyObject]()
    globalCountArray.append(assetDictionary as AnyObject)
    let dict = [String:AnyObject]()




    globalCountArray = globalCountArray.filter({ (obj) -> Bool in

        if obj is[String:AnyObject] {

            return (obj as! [String:AnyObject]) != dict 


        }
        return false
    })

--------- 或者您可以通过 ----------

实现相同的效果
globalCountArray = globalCountArray.filter({ (obj) -> Bool in

            if obj is[String:AnyObject] {

                return (obj as! [String:AnyObject]) == dict 


            }
            return true
        })

您需要将此方法添加到您的类定义之外。

public func !=(lhs: [String: AnyObject], rhs: [String: AnyObject] ) -> Bool {
    return !NSDictionary(dictionary: lhs).isEqual(to: rhs)
}

 public func ==(lhs: [String: AnyObject], rhs: [String: AnyObject] ) -> Bool {
    return NSDictionary(dictionary: lhs).isEqual(to: rhs)
}

【讨论】:

  • 我得到了这个错误 'AnyObject' 不能转换为 '[String : AnyObject]';你的意思是用'as!'强制沮丧?
  • 我已经尝试过了,但我得到了错误二元运算符'!='不能应用于两个'[String:AnyObject]'操作数
  • 哦,我现在实际上是为“==”制作的,我已经为“!=”更新了它
  • 它不会删除同一个对象,而是删除另一个对象。例如假设有两个字典 A,B 我想删除 A 但实际上它会删除 B 而不是 A.. 我认为 != 是必需的.. 但它给出了错误
  • 我根据您的问题使用了“!=”。您需要为此选择“==”。
【解决方案2】:

你可以为字典写一个扩展:

extension Dictionary where Key: ExpressibleByStringLiteral, Value: AnyObject {
    func isEqual(_ dictionary: [String: AnyObject]) -> Bool {
        return NSDictionary(dictionary: dictionary).isEqual(to: self)
    }

    func isNotEqual(_ dictionary: [String: AnyObject]) -> Bool {
        return !NSDictionary(dictionary: dictionary).isEqual(to: self)
    }
}

然后您可以将[String: AnyObject] 字典与:

FirstDictionary.isEqual(SecondDictionary)
FirstDictionary.isNotEqual(SecondDictionary)

在你的情况下:

var globalCountArray = [AnyObject]()
var assetDictionary = [String:AnyObject]()
globalCountArray.append(assetDictionary as AnyObject)

globalCountArray = globalCountArray.filter { (($0 as! [String: AnyObject]).isNotEqual(assetDictionary)) }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-11
    • 2014-07-29
    • 1970-01-01
    • 2017-05-19
    • 2016-09-11
    相关资源
    最近更新 更多