无法使用类型为'(of:Any)'

时间:2017-08-03 23:11:18

标签: arrays swift core-data swift3

我正在创建一个新闻应用,您可以在其中选择要查看的主题。我遇到的问题是你取消选择主题。所有选定的主题都将添加到ArticleSource属性下名为source的实体中的CoreData中。当我尝试使用字符串Results在名为title的数组中找到主题时,会发生错误。由于我不知道数组中主题的位置,我尝试使用产生错误的index(of: )方法找到它:Cannot invoke index with an argument list of type '(of: Any)'

任何帮助表示感谢。

do {

            let appDelegate = UIApplication.shared.delegate as! AppDelegate
            let context = appDelegate.persistentContainer.viewContext
            let request = NSFetchRequest<NSFetchRequestResult>(entityName: "ArticleSource")
            request.returnsObjectsAsFaults = false

            var results = try context.fetch(request)
            if results.count > 0 {

                for result in results as! [NSManagedObject] {
                    if let source = result.value(forKey: "source") as? String {
                        if source == title {
                            print("it matches")

                            if let index = results.index(of: title) {
                                results.remove(at: index)
                            }
                        }

                        print("results = \(results)")
                    }
                }
            }
        } catch {
            print("error")
        }

        do {
            let appDelegate = UIApplication.shared.delegate as! AppDelegate
            let context = appDelegate.persistentContainer.viewContext
            try context.save()
            print("SAVED")
        } catch {
            // error
        }

3 个答案:

答案 0 :(得分:1)

无需循环结果来获取索引。你可以试试这个。

var results = context.fetch(request)
if let index = results.index(where: { (result) -> Bool in 
                                        result.value(forKey: "source") == title
                                     })
  {
        results.remove(at: index)
  }

答案 1 :(得分:1)

Cannot invoke index with an argument list of type '(of: X)

的可能原因

是因为X类型不符合Equatable

答案 2 :(得分:1)

  

arr.index(of: <Element>)中,元素应符合Equatable,类型X不符合Equatable

     

对于[X]的数组,请使用arr.index(where:)

enter image description here

将您的代码更新为:

if let index = results.index(where: { $0 as? String == title }) {
   print(index)
}