我有一个功能可以检查是否正在使用电子邮件,这是该功能的代码:
UTF-8
如您所见,该函数可以正常工作,它知道是否接收电子邮件,但是它将我的应用返回“ Optional(false)”,而不是“ false”或“ true”。
这是我的Xcode代码:
import * as functions from 'firebase-functions'
import * as admin from 'firebase-admin'
admin.initializeApp()
exports.uniqueEmail = functions.https.onCall((data) => {
const email = data.email;
if (!email) {
console.log('missing email')
throw new functions.https.HttpsError('invalid-argument', 'Missing email parameter');
}
return admin.auth().getUserByEmail(email).then(function(userRecord) {
console.log('Successfully fetched user data:', userRecord.toJSON());
return "true"
}).catch(function(error) {
console.log('Error fetching user data:', error);
console.log('Email: ', email)
return "false"
});
});
预先感谢
答案 0 :(得分:1)
得到opcional(true / false,因为)正在打印可选值'?'
您的代码:
print(result?.data)
示例:
let value = false
print("this is a false value: \(value?)")
每次您打印带有“?”的值您会优先选择
答案 1 :(得分:0)
您传递给call()的回调会产生HTTPSCallableResult或错误:
func call(completion: @escaping (HTTPSCallableResult?, Error?) -> Void)
任何一个都可能为nil,这就是为什么在使用它们的值之前必须先两者对其进行检查。您现在正在检查error
,但没有检查result
,这意味着您得到的Optional需要进一步检查nil。
您应该改用documentation中所述的模式:
functions.httpsCallable("addMessage").call(["text": inputField.text]) { (result, error) in
if let error = error as NSError? {
if error.domain == FunctionsErrorDomain {
let code = FunctionsErrorCode(rawValue: error.code)
let message = error.localizedDescription
let details = error.userInfo[FunctionsErrorDetailsKey]
}
// ...
}
if let text = (result?.data as? [String: Any])?["text"] as? String {
self.resultField.text = text
}
}
请注意,错误和成功案例均使用if let
。