Więc mogę to zrobić:
var stringNumb: NSString = "1357"
var someNumb: CInt = stringNumb.intValue
Ale nie mogę znaleźć sposobu, aby to zrobić w / a String
. Chciałbym zrobić coś takiego:
var stringNumb: String = "1357"
var someNumb: Int = Int(stringNumb)
To też nie działa:
var someNumbAlt: Int = myString.integerValue
var someNumb: Int? = Int(stringNumb)
lubvar someNumb = Int(stringNumb)
Odpowiedzi:
Swift 2.0 możesz zainicjować Integer za pomocą konstruktora
var stringNumber = "1234" var numberFromString = Int(stringNumber)
źródło
toInt()
metody jako częściString
. Więc tenInt
konstruktor jest teraz jedynym sposobem na konwersję ciągów znaków na wartości typu int.Użyłbym:
var stringNumber = "1234" var numberFromString = stringNumber.toInt() println(numberFromString)
Uwaga
toInt()
:źródło
var someNumb: Int = stringNumber.toInt()!
jak wskazał @NateCook!
na wezwanie, można zadeklarować zmienną jako opcjonalne:someNumb: Int? = stringNumber.toInt()
. Wtedy system bezpieczeństwa typu będzie świadomy, żefoo
może nie istnieć. Umieszczenie!
spowoduje oczywiście zawieszenie się, jeśli ciąg nie może zostać przekonwertowany na liczbę.W Swift 3.0
Typ 1: Konwertuj NSString na ciąg
let stringNumb:NSString = "1357" let someNumb = Int(stringNumb as String) // 1357 as integer
Typ 2: jeśli ciąg ma tylko liczbę całkowitą
let stringNumb = "1357" let someNumb = Int(stringNumb) // 1357 as integer
Typ 3: jeśli ciąg ma wartość zmiennoprzecinkową
let stringNumb = "13.57" if let stringToFloat = Float(stringNumb){ let someNumb = Int(stringToFloat)// 13 as Integer }else{ //do something if the stringNumb not have digit only. (i.e.,) let stringNumb = "13er4" }
źródło
stringToFloat
to!= nil
, powinieneś użyćif let
.Metoda, którą chcesz, to
toInt()
- musisz być trochę ostrożny, ponieważtoInt()
zwraca opcjonalną wartość Int.let stringNumber = "1234" let numberFromString = stringNumber.toInt() // numberFromString is of type Int? with value 1234 let notANumber = "Uh oh" let wontBeANumber = notANumber.toInt() // wontBeANumber is of type Int? with value nil
źródło
toInt()
jest właściwą drogą, aby to zrobić.Jeśli możesz używać
NSString
tylko.Jest dość podobny do obiektywnego-c. Wszystkie typy danych są dostępne, ale wymagają
as NSString
dodaniavar x = "400.0" as NSString x.floatValue //string to float x.doubleValue // to double x.boolValue // to bool x.integerValue // to integer x.intValue // to int
toInt()
Dodaliśmy również funkcję Zobacz Apple Inc. „Swift Programming Language”. iBooks. https://itun.es/us/jEUH0.l strona 49źródło
as NSString
. naprawiono to @gwcoffeypowyższa odpowiedź nie pomogła mi, ponieważ moja wartość ciągu wynosiła „700,00”
w Swift 2.2 działa to dla mnie
let myString = "700.00" let myInt = (myString as NSString).integerValue
Przekazałem myInt do NSFormatterClass
let formatter = NSNumberFormatter() formatter.numberStyle = .CurrencyStyle formatter.maximumFractionDigits = 0 let priceValue = formatter.stringFromNumber(myInt!)! //Now priceValue is ₹ 700
Dzięki temu wpisowi na blogu.
źródło
Double()
tego samego sposobu, w jaki używamyInt()
. Nie ma potrzeby używania mostkowania do NSString.Double()
a następnie użyćInt()
. W ten sposób:if let d = Double("700.00") { let i = Int(d); print (i) }
:)Możesz mostkować z String do NSString i konwertować z CInt do Int w następujący sposób:
var myint: Int = Int(stringNumb.bridgeToObjectiveC().intValue)
źródło
W tym celu napisałem rozszerzenie. Zawsze zwraca
Int
. Jeśli ciąg nie mieści się w ciąguInt
, zwracane jest 0.extension String { func toTypeSafeInt() -> Int { if let safeInt = self.toInt() { return safeInt } else { return 0 } } }
źródło
return self.toInt() ?? 0
. Prawdopodobnie lepiej jest po prostu napisać to w ten sposób, niż mieć do tego metodę rozszerzającą.Bardziej ogólnym rozwiązaniem mogłoby być rozszerzenie
extension String { var toFloat:Float { return Float(self.bridgeToObjectiveC().floatValue) } var toDouble:Double { .... } .... }
to na przykład rozszerza szybki natywny obiekt String o toFloat
źródło
Konwertuj ciąg na Int w Swift 2.0:
var str:NSString = Data as! NSString var cont:Int = str.integerValue
posługiwać się
.intergerValue or intValue for Int32
źródło
8: 1 kurs (*)
var stringNumb: String = "1357" var someNumb = Int(stringNumb)
lub
var stringNumb: String = "1357" var someNumb:Int? = Int(stringNumb)
Int(String)
zwraca opcjonalnyInt?
, a nieInt
.Bezpieczne użytkowanie: nie rozpakowuj w sposób jawny
let unwrapped:Int = Int(stringNumb) ?? 0
lub
if let stringNumb:Int = stringNumb { ... }
(*) Żadna z odpowiedzi w rzeczywistości nie dotyczyła przyczyny
var someNumb: Int = Int(stringNumb)
niepowodzenia.źródło
Prosty, ale brudny sposób
// Swift 1.2 if let intValue = "42".toInt() { let number1 = NSNumber(integer:intValue) } // Swift 2.0 let number2 = Int(stringNumber) // Using NSNumber let number3 = NSNumber(float:("42.42" as NSString).floatValue)
Sposób rozszerzenia
To jest naprawdę lepsze, ponieważ będzie ładnie grać z ustawieniami narodowymi i dziesiętnymi.
extension String { var numberValue:NSNumber? { let formatter = NSNumberFormatter() formatter.numberStyle = .DecimalStyle return formatter.numberFromString(self) } }
Teraz możesz po prostu zrobić:
let someFloat = "42.42".numberValue let someInt = "42".numberValue
źródło