0
私はFirebaseとインターフェースするDataServiceを書いています。私はクロージャ内にself.realID
を設定しています。クロージャの外側で参照すると、ゼロ値をアンラップするので失敗します。なぜこうなった?Swift Scoping Rules - 非nil値を設定した後の値なし
マイファイル:
import Foundation
import Firebase
class Database {
var firebaseRef = Firebase(url:"https://<<UNIQUE>>.firebaseio.com")
class var sharedInstance: Database {
struct Data {
static var instance: Database?
static var token: dispatch_once_t = 0
}
dispatch_once(&Data.token) {
Data.instance = Database()
}
return Data.instance!
}
var uid : String!
var realID : String!
var validated = false
func validate(user: String, study: String) -> Bool {
firebaseRef.authUser(user+"@example.com", password: user,
withCompletionBlock: { error, authData in
if error != nil {
NSLog(String(error))
} else {
self.uid = authData.uid
NSLog(authData.uid)
}
})
let usersRef = Firebase(url: "https://<<UNIQUE>>.firebaseio.com/users")
usersRef.observeEventType(FEventType.Value, withBlock: { (snapshot) in
let value = snapshot.value.objectForKey("study") as! String
self.realID = value
NSLog(self.realID) // this is a non-nil value
})
NSLog("About to encounter nil value and crash")
if self.realID == study {
return true
}
return false
}
}
私が起きてから、この致命的なエラーを防ぐにはどうすればよいですか?
。クロージャは、非同期実装が完了した後に呼び出されます。 'observeEventType'が発生した後に、ブロックの後のコードが必ずしも呼び出されるわけではありません。 – lostInTransit
希望の結果を得るには、どのようにして現在のコードに正確に入りますか?私は非常に迅速です。 – bdeo
私は上記のコードを追加しました –