Хитрость заключается в том, чтобы использовать встроенные свойства, инициализирующие объект BTCard, и сопоставлять их, а не использовать NSDictionary. Так что это работает:
let braintreeClient = BTAPIClient(authorization: "<#CLIENT_AUTHORIZATION#>")!
let cardClient = BTCardClient(apiClient: braintreeClient)
let card = BTCard.init()
card.number = "4111111111111111"
card.expirationMonth = "12"
card.expirationYear = "2018"
card.cvv = "111"
card.postalCode = "94107"
cardClient.tokenizeCard(card) { (tokenizedCard, error) in
// Communicate the tokenizedCard.nonce to your server, or handle error
}
Таким образом, объект BTCard возвращает приемлемые ключи ... это заняло у меня несколько часов, пытаясь найти разные ответы на этот вопрос. Брэйнтри и их доктора не предлагают это в качестве примера, но это был единственный способ, которым он работает для меня.
(Каждый из ваших бэкэндов может проверять эти данные перед отправкой в Braintree, но это поможет при интеграции)