我目前正在使用Stripe制作IOS应用。当我尝试实现Stripe卡对象(下图)时,我在行上遇到了编译器错误
var expMonth: NSNumber = Int(expArr[0])!
var expYear: NSNumber = Int(expArr[1])!
说 “可选类型[String]的类型未包装。未解包;你的意思是使用!还是??”
func buttonPressed(_: UIButton) {
let creditCard = STPCardParams()
creditCard.number = cardNumberTextField.text
creditCard.cvc = cvvTextField.text
if (expDateTextField.text?.isEmpty == nil){
let expArr = expDateTextField.text?.components(separatedBy: "/")
if (expArr?.count)! > 1 {
var expMonth: NSNumber = Int(expArr[0])!
var expYear: NSNumber = Int(expArr[1])!
creditCard.expMonth = expMonth.uintValue
creditCard.expYear = expYear.uintValue
如何修复此错误?非常感谢您的帮助!
答案 0 :(得分:-1)
我怀疑你的expArr是可选的,请先尝试展开它:
var expMonth: NSNumber = NSNumber(value: Int(expArr![0])!)
var expYear: NSNumber = NSNumber(value: Int(expArr![1])!)
另外我甚至不确定你可以直接为NSNumber分配一个int,因为NSNumber是一个指针类型,但在Swift 3中可能已经改变了。
答案 1 :(得分:-1)
从int转换为NSNumber:
NSNumber(value: intValue)
答案 2 :(得分:-1)
expArr
类型为[String]?
。您可以通过强制单击变量名来检查这一点。
由于它是可选的,你必须解开它,然后才能访问数组中的项目:
var expMonth: NSNumber = Int(expArr[0])!
var expYear: NSNumber = Int(expArr[1])!
你可以通过强行展开它来做到这一点:
var expMonth: NSNumber = Int(expArr![0])!
var expYear: NSNumber = Int(expArr![1])!
或者你可以通过条件绑定来实现,这更安全:
if let expirationDates = expArr {
var expMonth: NSNumber = Int(expirationDates[0])!
var expYear: NSNumber = Int(expirationDates[1])!
creditCard.expMonth = expirationDates.uintValue
creditCard.expYear = expirationDates.uintValue
// ...
}