Я пишу приложение для tvOS. Я хочу проверить, есть ли запись в базе данных CloudKit.
Я пытаюсь сделать это, увидев, есть ли запись с определенным eventID
.
В идеале я хочу вызвать функцию, которая возвращает true или false:
if isEventInWatchListFile(eventID) {
// ... do things
}
Я пробовал следующее:
var results = [AnyObject]()
var onList:Bool?
. . .
func isEventInWatchListFile(eventID: String) -> Bool {
let container = CKContainer(identifier: "the container")
let privateDB = container.privateCloudDatabase
let predicate = NSPredicate(format: "eventID == %@",eventID)
let query = CKQuery(recordType: "UserWatchlist", predicate: predicate)
privateDB.performQuery(query, inZoneWithID: nil) { results , error in
guard let results = results else {
// error handler to come
return
}
if results[0]["eventID"] != nil {
self.onList = true
} else {
self.onList = false
}
}
return self.onList!
}
Это вылетает с «фатальной ошибкой: неожиданно найдено nil при развертывании необязательного значения». Я думаю, это потому, что onList
заперт в закрытии. У меня есть два вопроса:
1) Можно ли передать onList
оператору return
, и если да, то как? Я читал о замыканиях в Swift, но не знаю, как применить то, что я прочитал.
2) Есть ли лучший способ сделать тест, который я хочу сделать? Мой подход кажется мне неуклюжим.
Я очень новичок в iOS и Swift. Любая помощь принята с благодарностью.