私はObjective-Cの新機能ではありませんが、私は迅速です。私はObjective-Cで無かったらオブジェクトを比較していましたが、すぐにはできません。即時にnilオブジェクトを比較/返すことができません
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がnilの場合、メソッドが呼び出された場所をチェックすることができず、コードがクラッシュします。
ところ私のコードがクラッシュです:
私はそれを行うことができますどのようにlet currentUser = UserDBService().getCurrentUser()
let userID = String(currentUser.userId)
?
UPDATE
私はマイケルの答えを使用しているが、それでも私はクラッシュを取得:
はEendjeのソリューションを使用していると私はこの取得:
クラッシュするとどのようなデバッグ情報が得られますか? – Avi
別の質問:すべてのユーザーを取得してから、isSignedInプロパティをチェックする理由は何ですか?なぜ、そのプロパティを持つエンティティを最初にフェッチするだけではないのですか? Swiftだけではなく、あなたがコアデータに慣れていないようです。 – Avi
フェッチされたユーザーがない場合、または誰もログインしていない場合、 'getCurrentUser'は新しく作成された' Users'インスタンスを返します。私は 'userId'プロパティがnilであり、クラッシュを引き起こしている強制アンラップされていると推測しています。 Swiftのオブジェクトはnilを含むことはできません - オプションはnilを含むことができ、接尾辞 "?"で宣言されます。または "!" – Michael