我对Objective-C并不陌生,但我对swift很陌生。我曾经比较过Objective-C中的对象,但我无法迅速做到这一点。无法在swift中比较/返回零对象
func getCurrentUser() -> Users{
let fetchRequest = NSFetchRequest(entityName: "Users")
var fetchedUsers = NSArray()
do {
let fetchedEntities = try self.managedObjectContext.executeFetchRequest(fetchRequest) as NSArray
fetchedUsers = fetchedEntities
} catch {
// Do something in response to error condition
}
var userToSend = Users()
for user in fetchedUsers{
let currentUser = user as! Users
if(currentUser.isSignedIn == 1)
{
userToSend = currentUser
break
}
}
return userToSend
}
如果我的userToSend是零,我无法检查它的方法调用,代码崩溃。
这是我的代码崩溃:
let currentUser = UserDBService().getCurrentUser()
let userID = String(currentUser.userId)
我可怎么办呢?
UPDATE
我用迈克尔的答案,但我仍然得到崩溃:
曾用Eendje的解决方案,我得到这个:
当它崩溃时,你会得到哪些调试信息? – Avi
另一个问题:为什么要抓取每个用户然后检查'isSignedIn'属性?为什么不只是获取具有该属性集的实体?看起来你是核心数据的新手,而不仅仅是Swift。 – Avi
如果没有提取的用户,或者没有用户登录,那么'getCurrentUser'将返回一个新创建的'Users'实例。我猜它是'userId'属性是零,并且是强制解包导致崩溃。 Swift中的对象不能包含nil - 只有Optionals可以包含nil,并且它们声明后缀为“?”要么 ”!”。 – Michael