使用 Swift 测试 CloudKit 中是否存在记录 2
Test for presence or absence of a record in CloudKit with Swift 2
我正在编写一个 tvOS 应用程序。我想测试一下 CloudKit 数据库中是否有记录。
我试图通过查看是否有包含特定 eventID
的记录来做到这一点。
理想情况下,我想调用一个 returns 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!
}
这与 "fatal error: unexpectedly found nil while unwrapping an Optional value" 一起崩溃。我认为这是因为 onList
被锁定在一个闭包中。我有两个问题:
1) 是否可以将 onList
传递给 return
语句,如果可以,如何传递?我已经阅读了 Swift 中关于闭包的内容,但不确定如何应用我所阅读的内容。
2) 有没有更好的方法来做我想做的测试?我的方法对我来说似乎很笨拙。
我对 iOS 和 Swift 很陌生。收到任何帮助。
如果我正确阅读你的代码,你的陈述
return self.onList!
将始终失败,因为您正在异步设置值,并且在异步操作结束之前将默认 (nil) 值传递给 return。
您可以创建类似 func doSomethingEventInWatchListFile(eventID: String, funcToRunIfEventIsInTheWatchList: () -> Void)
的内容,而不是 func isEventInWatchListFile(eventID: String) -> Bool
。那么你将拥有:
if results[0]["eventID"] != nil {
funcToRunIfEventIsInTheWatchList()
} else ...
我正在编写一个 tvOS 应用程序。我想测试一下 CloudKit 数据库中是否有记录。
我试图通过查看是否有包含特定 eventID
的记录来做到这一点。
理想情况下,我想调用一个 returns 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!
}
这与 "fatal error: unexpectedly found nil while unwrapping an Optional value" 一起崩溃。我认为这是因为 onList
被锁定在一个闭包中。我有两个问题:
1) 是否可以将 onList
传递给 return
语句,如果可以,如何传递?我已经阅读了 Swift 中关于闭包的内容,但不确定如何应用我所阅读的内容。
2) 有没有更好的方法来做我想做的测试?我的方法对我来说似乎很笨拙。
我对 iOS 和 Swift 很陌生。收到任何帮助。
如果我正确阅读你的代码,你的陈述
return self.onList!
将始终失败,因为您正在异步设置值,并且在异步操作结束之前将默认 (nil) 值传递给 return。
您可以创建类似 func doSomethingEventInWatchListFile(eventID: String, funcToRunIfEventIsInTheWatchList: () -> Void)
的内容,而不是 func isEventInWatchListFile(eventID: String) -> Bool
。那么你将拥有:
if results[0]["eventID"] != nil {
funcToRunIfEventIsInTheWatchList()
} else ...