I'm having trouble figuring out exactly what kind of argument list Swift is expecting here, because I am getting an error when I call "filter" on a swift array.
Here is my code:
func setDefaultBook()
{
var book: Book
let fetchRequest: NSFetchRequest<Book> = Book.fetchRequest()
if let fetchResults = try? managedObjectContext.fetch(fetchRequest) {
book = fetchResults.filter { $0.title == defaultBookTitle }
}
...
}
A book is an NSManagedObject, and a book's title is a simple String property - an @NSManaged var. There is nothing special about the title here, and there's nothing to indicate that checking a title would throw. However, I get an error on the filter line that says:
"Cannot invoke 'filter' with an argument list of type '((Book) throws -> Bool)'
Clearly I'm missing something, because this comparison doesn't look to me like it would ever throw. I've tried a couple of other ways of doing this, and I keep getting the same error.
Building out the closure like so doesn't help:
book = fetchResults.filter { book in
book.title == defaultBookTitle
}
And setting a predicate to do the same thing doesn't help either:
let predicate: (Book) -> Bool = { $0.title == self.defaultBookTitle }
book = fetchResults.filter(predicate)
I keep getting the same error as before.
Anyone have any idea why swift thinks that the argument here is (Book) throws -> Bool instead of just (Book) -> Bool?
Has anyone run into this error before? Any suggestions to fix it are appreciated.