#swift #google-cloud-firestore #google-cloud-functions #stripe-payments #optional
#swift #google-cloud-firestore #google-cloud-функции #stripe-платежи #тип параметра
Вопрос:
Я внедряю Stripe в свое приложение, поэтому, когда я отправляю свой customer_id в качестве параметра в swift, он должен быть необязательным, иначе он не работает. Но я извлекаю идентификатор из firebase как необязательное значение. Есть ли какой-либо способ превратить необязательный идентификатор в необязательную переменную. код для получения идентификатора из firestore:
docRef.getDocument(source: .cache) { (document, error) in
if let document = document {
id = document.get("id") as? String ?? ""
}
идентификатор возвращается как необязательный. Мне нужно отправить необязательную переменную в качестве идентификатора (это единственный способ, которым это работает):
var data = ["api_version" : apiVersion, "customer_id" : id]
functions.httpsCallable("getStripeEphemeralKeys").call(data)
Приведенный выше код выдает ошибки, но если я отправляю тот же точный идентификатор, что и необязательная переменная, он работает
Комментарии:
1. Любая необязательная строка может быть присвоена их необязательному типу аналога без каких-либо жалоб компилятора. Где именно у вас это не работает?
2.
customer_id
Похоже, что это параметр вашей функции firebase, который является необязательным параметром. Также, вероятно, вы могли бы определить свой документ таким образом, чтобы идентификатор customer_id сохранялся какcustomer_id
вместо фактическогоdocument id
, чтобы он мог быть необязательным3. Вы могли бы сделать
Optional.some(id)
, но я сомневаюсь, что это ваша проблема4. Вы должны объяснить, почему вы сделали
id
необязательной в первую очередь. Поскольку похоже, что простое объявление ее какvar id: String?
решит вашу проблему. Затем просто назначьтеid = document.get("id") as? String
ей, без?? ""
части.
Ответ №1:
Я исправил проблему. Действительно странно, как firebase возвращает необязательную, если вы используете document[«id»} в отличие от document.get(«id»).
var id:Any? = ""
let docRef = db.collection("Profile").document((user?.email)!)
docRef.getDocument(source: .cache) { (document, error) in
if let document = document {
id = document["id"]
var data = ["api_version" : apiVersion, "customer_id" : id]
self.functions.httpsCallable("getStripeEphemeralKeys").call(data) {