Tôi muốn tạo một hàm để kiểm tra xem user_id đã có trong cơ sở dữ liệu của tôi chưa.Swift có thể trả về giá trị từ khối Void-return không đồng bộ không?
class func checkIfUserExsits(uid:String) -> Bool {
userRef.childByAppendingPath(uid).observeSingleEventOfType(.Value, withBlock: { (snapShot: FDataSnapshot!) -> Void in
if snapShot.value is NSNull {
return false
} else {
return true
}
})
}
Tuy nhiên, observeSingleEventOfType
là API do Firebase của bên thứ ba cung cấp. Nó được xác định để trả lại Void
.
- (void)observeSingleEventOfType:(FEventType)eventType withBlock:(void (^) (FDataSnapshot *snapshot))block
Lỗi: Type 'Void' does not conform to protocol 'BooleanLiteralConvertible'
Đánh giá cao bất kỳ loại giúp.
CẬP NHẬT
tôi đang cố gắng một cách khác nhau:
class func checkIfExist(uid: String) -> Bool {
var answer:Bool = false
var text:String = "not yet completed"
let queue = dispatch_group_create()
dispatch_group_enter(queue)
userRef.childByAppendingPath(uid).observeSingleEventOfType(.Value, withBlock: { (snapShot: FDataSnapshot!) -> Void in
if snapShot.value is NSNull {
text = "This is a new user"
answer = false
dispatch_group_leave(queue)
} else {
text = "Found the user in Firebase"
answer = true
dispatch_group_leave(queue)
}
})
dispatch_group_wait(queue, DISPATCH_TIME_FOREVER)
println(text)
return answer
}
Bằng cách nào đó nó chỉ đóng băng ở đó. Tôi biết cách tiếp cận này có thể không có chủ đề ngay bây giờ. Nhưng xin vui lòng giúp đỡ.
Cảm ơn. Tôi tự hỏi liệu có cách nào khác tiết kiệm hơn không. Tôi không thích dự án của tôi được lồng trong các khối hoàn chỉnh bên trong các khối hoàn chỉnh. –
Cảm ơn bạn rất nhiều Rob. Tôi biết tôi có thể làm điều đó theo một cách rất sai, nhưng tôi vẫn muốn thử. Như bạn đã nói, tôi đang cố gắng không đồng bộ hóa tính năng này. Tôi không quen thuộc với semaphores. Tôi đã cố gắng sử dụng dispactch_group_wait thay thế. Vui lòng xem cập nhật câu hỏi của tôi. –
Nếu họ gửi trình xử lý hoàn thành của họ trở lại hàng đợi chính (và trong nhiều trường hợp, thư viện sẽ làm điều này để đơn giản hóa cuộc sống cho chúng tôi), bạn sẽ bế tắc, chặn luồng chính, chờ thư viện gửi trình xử lý hoàn thành tới cùng một chuỗi bạn đang chặn. Tôi không biết nếu đó là những gì họ đã làm ở đây, nhưng có khả năng. Tạm thời loại bỏ nhóm công văn và sau đó kiểm tra 'NSThread.isMainThread' nếu bạn muốn xác nhận. Nhưng, một lần nữa, tôi sẽ cố gắng hơn để chống lại việc chặn luồng chính đơn giản bởi vì bạn ít thoải mái hơn khi sử dụng các bao đóng và các mẫu không đồng bộ. – Rob