2016-11-11 1 views
-1

Ich mache derzeit eine IOS-App mit Stripe. Als ich versuchte, eine Streifenkarte Objekt (das Bild unten) zu implementieren, bekam ich einen Compiler-Fehler auf der LinieWert des optionalen Typs [Zeichenfolge] nicht eingepackt

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

sagen „Art der optionalen Typ [Zeichenfolge] nicht eingewickelt nicht ausgepackt,. Wollten Sie aufrufen benutzen! oder ?? "

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 

Wie kann ich diesen Fehler beheben? Ihre Hilfe wäre willkommen!

+1

Was ist ExpArr in Ihrem Code? – User511

+0

expArr = Ablaufdatum Array. Ich möchte Benutzern das Format wie "MM/YYYY" geben –

Antwort

-1

Ihre expArr ist ein optionaler Ich vermute, versuchen Sie es auspacken zuerst:

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

auch nicht einmal sicher, dass ich Sie direkt einen int zu NSNumber zuweisen kann als NSNumber ein Zeigertyp ist aber das könnte sich geändert haben in Swift 3.

+0

Hallo Jacos. Danke für die Antwort! Als ich wie Sie den Code auspackte, bekam ich einen weiteren Fehler, der besagt "Art des Ausdrucks ist mehrdeutig ohne mehr Kontext". –

+0

Ja, wie ich erwartet habe, kann man einen Int nicht direkt einer NSNummer zuweisen, siehe die Besetzung in meiner geänderten Antwort. –

+0

hallo jacob. Ich danke dir sehr. Ich wende deine Methode jetzt an! –

-1

Konvertierung von int nach NSNumber:

NSNumber(value: intValue) 
+0

Hallo Bhavuk. Ich schätze deine Hilfe sehr! Du hattest Recht damit. var expMonth: NSNumber = NSNumber (Wert: Int (expArr! [0])!) var expYear: NSNumber = NSNumber (Wert: Int (expArr! [1])!) Der Fehler ist verschwunden –

-1

Ihre expArr ist vom Typ [String]?. Sie können dies überprüfen, indem Sie auf den Variablennamen klicken.

Und da es sich um eine optional ist, Sie müssen es auspacken, bevor Sie ein Element in dem Array zuzugreifen hier:

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

Sie können entweder es, sie mit Gewalt zu tun auspackt:

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

Oder Sie können es durch bedingte Bindung tun, die sicherer ist:

if let expirationDates = expArr { 
    var expMonth: NSNumber = Int(expirationDates[0])! 
    var expYear: NSNumber = Int(expirationDates[1])! 

    creditCard.expMonth = expirationDates.uintValue 
    creditCard.expYear = expirationDates.uintValue 

    // ... 
} 
Verwandte Themen