2016-11-11 68 views
-1

我目前正在使用Stripe製作IOS應用程序。當我試圖執行一個磁條卡的對象(如下圖),我上線可選類型[String]不包裝的值

var expMonth: NSNumber = Int(expArr[0])! 
var expYear: NSNumber = Int(expArr[1])! 

說 「可選類型[字符串]不換不解開的類型有一個編譯器錯誤,你的意思是使用!或??「

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 

我該如何解決這個錯誤?您的幫助將不勝感激!

+1

代碼中的expArr是什麼? – User511

+0

expArr =到期日期數組。我想讓用戶輸入格式如「MM/YYYY」 –

回答

-1

你expArr是可選的,我懷疑,試試先解開它:

var expMonth: NSNumber = NSNumber(value: Int(expArr![0])!) 
var expYear: NSNumber = NSNumber(value: Int(expArr![1])!) 

此外,我甚至不能確定您可以直接分配一個int到的NSNumber作爲NSNumber的是一個指針類型,但可能已經改變在斯威夫特3.

+0

hi Jacos。感謝您的迴應!當我解開你的代碼時,我又得到另一個錯誤:「表達的類型不明確,沒有更多的上下文」。 –

+0

是的,正如我所預料的那樣,您不能直接將一個int分配給一個NSNumber,請參閱修改後的答案中的演員表。 –

+0

你好雅各布。非常感謝。我正在申請你的方法! –

-1

從int轉換爲NSNumber的:

NSNumber(value: intValue) 
+0

嗨Bhavuk。我非常感謝你的幫助!你是對的。 var expMonth:NSNumber = NSNumber(value:Int(expArr![0])!) var expYear:NSNumber = NSNumber(value:Int(expArr![1])!)錯誤消失 –

-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 

    // ... 
} 
相關問題