【发布时间】:2017-04-22 18:47:49
【问题描述】:
我无法准确确定 Swift 在这里期望什么样的参数列表,因为当我在 swift 数组上调用“过滤器”时出现错误。
这是我的代码:
func setDefaultBook()
{
var book: Book
let fetchRequest: NSFetchRequest<Book> = Book.fetchRequest()
if let fetchResults = try? managedObjectContext.fetch(fetchRequest) {
book = fetchResults.filter { $0.title == defaultBookTitle }
}
...
}
一本书是一个NSManagedObject,一本书的标题是一个简单的字符串属性——一个@NSManaged var。这里的标题没有什么特别之处,也没有任何迹象表明检查标题会抛出异常。但是,我在过滤器行上收到一条错误消息:
"不能使用类型为'((Book) throws -> Bool)'的参数列表调用'filter'
很明显,我遗漏了一些东西,因为在我看来,这种比较不像它会抛出的那样。我已经尝试了其他几种方法,但我一直收到同样的错误。
像这样构建闭包并没有帮助:
book = fetchResults.filter { book in
book.title == defaultBookTitle
}
设置谓词来做同样的事情也无济于事:
let predicate: (Book) -> Bool = { $0.title == self.defaultBookTitle }
book = fetchResults.filter(predicate)
我一直收到和以前一样的错误。
任何人都知道为什么 swift 认为这里的参数是(Book) throws -> Bool 而不仅仅是(Book) -> Bool?
以前有没有人遇到过这个错误?任何修复它的建议表示赞赏。
【问题讨论】: