NSpredicate对象模型数组过滤器无法在Swift 4.0中崩溃


  1. 我正在Swift 4.0工作,我在MutableArray中有模型对象, nspredicate不起作用。

                 //Here is code
                //Model class:
                class Modelclass: NSObject
                {
                    var firstName:String!
                    var lastName:String!
                }
                // Viewcontroller doing predicate:
                let ary = NSMutableArray()
                let userModel          = Modelclass()
                userModel.firstName    = "Arrya"
                userModel.lastName     = "stark"
                ary.add(userModel)
                let commitPredicate = NSPredicate(format: "firstName == %@", "Arrya")
                let resultAry       = ary.filtered(using: commitPredicate)
                print(resultAry)
    

我解决了问题, 解决方案1:

    //I just added below code in model class
    extension Modelclass {
        @objc override func value(forKey key: String) -> Any? {
            switch key {
            case "firstName":
                return firstName
            case "lastName":
                return lastName
            default:
                return nil
            }
        } 
   }

解决方案2:

在变量之前添加@objc:

        class Modelclass: NSObject
        {
            @objc var firstName:String!
            @objc var lastName:String!
        }
  1. var是针对可变内容/变量引入的
  2. 在Swift中,您可以使用filter替代NSPredicate

尝试这样:

            //Model class:
            class Modelclass
            {
                var firstName: String
                var lastName: String
                init(firstName: String, lastName: String) {
                    self.firstName = firstName
                    self.lastName = lastName
                }
            }
            // Viewcontroller doing predicate:
            var ary:[Modelclass] = []
            let userModel = Modelclass(firstName: "Arrya", lastName: "stark")
            ary.append(userModel)
            let resultAry = ary.filter{ $0.firstName == "Arrya" }
            print(resultAry)

最新更新