2014-10-30 4 views
11

Ich muss eine NSString in eine ganze Zahl in Swift konvertieren: Hier ist der aktuelle Code, den ich verwende; es funktioniert nicht:Wie konvertiere ich einen NSString mit Swift in eine ganze Zahl?

var variable = (NSString(data:data, encoding:NSUTF8StringEncoding)) 
exampeStruct.otherVariable = (variable).intValue 

Variable ist ein normaler varable und exampleStruct ist eine Struktur an anderer Stelle im Code mit einem subvariable otherVariable.

Ich erwarte, dass es exampleStruct.otherVariable zu einem int Wert der NSString zu setzen, aber ich bekomme die folgende Fehlermeldung:

"Cannot convert the expression's type() to type Float" 

Wie konvertiere ich eine NSString zu int in Swift?

+9

Was ist mit einem kurzen Blick auf die Dokumentation? https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/#//apple_ref/occ/instp/NSString/intValue. –

Antwort

1

Sie müssen 2 Optionals dort auspacken, beachten Sie, dass ich Variable auch als String deklariert habe, der dort ": String" hinzufügt. Beispiel:

if let variable:String = NSString(CString:"1", encoding: NSUTF8StringEncoding) { 
    if let otherVariable = variable.toInt() { 
     println(otherVariable) // "1" 
    } 
} 

In Ihrem Fall Sie so tun sollen:

if let variable:String = NSString(data: data, encoding: NSUTF8StringEncoding) { 
    if let exampeStruct.otherVariable = variable.toInt() { 
     println(exampeStruct.otherVariable) // "1" 
    } 
} 
+0

toInt() - Funktion in Swift 2 entfernt. Wir müssen den Konstruktor von Int verwenden, der eine Zeichenfolge akzeptiert - Int (myString). Weitere Informationen finden Sie in dieser Antwort: http://stackoverflow.com/a/30739522/878414 – Vaquita

1

Es sieht für mich aus, als wäre das Problem nicht die Int-Konvertierung, sondern eher, dass exampleStruct ein Float erwartet.

Wenn das jedoch nicht das Problem ist (und gewährt, Xcode Fehler für Swift scheinen oft mehr über die Zeilennummer als über das eigentliche Problem) dann sollte etwas wie das für Sie arbeiten?

1

Ich weiß, du dich auch schon die Antwort, aber ich möchte nur erklären, was (glaube ich) könnte nicht trivial sein

Erstens haben wir einige NSData wir NSString konvertieren wollen, weil niemand die Daten garantiert eine gültige UTF8 Puffer ist, zurückgeben eine optionale

var variable = NSString(data:data, encoding:NSUTF8StringEncoding) 

Was bedeutet, ist variable: NSString?

Normalerweise NSString zu Swifts überbrückte String, aber in diesem Fall verwenden wir einen NSString Konstruktor - man darüber mehr als „Foundation“ -ähnliche Syntax denken kann, die nicht direkt importiert wurde swift (da es keine Brücke für NSData)

wir noch die 'Stiftung' Weg mit NSString

if let unwrappedVariable = variable { 
    var number = unwrappedVariable.intValue 
} 

wennverwenden können 210 ist ein Float, aber der String ist ein String-Darstellung einer ganzen Zahl

if let unwrappedVariable = variable { 
    var number: Float = Float(unwrappedVariable.intValue) 
} 

wenn beide number und die Zeichenfolge (Darstellung) sind Schwimmern:

if let unwrappedVariable = variable { 
    var number:Float = unwrappedVariable.floatValue 
} 

Wie dem auch sei, es ist ein kleines Problem bei der Verwendung Stiftung. Für diese Arten von Konvertierungen gibt es kein Konzept für einen optionalen Wert (für int, float). Es wird 0 zurückgegeben, wenn es eine Zeichenfolge nicht als Ganzzahl oder Gleitkomma analysieren kann.Deshalb ist es besser, schnelle native String: