Обратный вызов, который вы передаете call () , выдает либо HTTPSCallableResult, либо ошибку:
func call(completion: @escaping (HTTPSCallableResult?, Error?) -> Void)
Любой из них может быть нулем, поэтому вынеобходимо проверить их оба , прежде чем использовать их значения.Вы проверяете error
прямо сейчас, но вы не проверяете result
, что означает, что вы получаете Необязательный, который нуждается в дополнительных проверках на ноль.
Вместо этого следует использовать шаблон, как описано в документация :
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
используется как в случае ошибки, так и в случае успеха.