신속하게 문자열에서 정수 값 가져 오기


134

그래서 나는 이것을 할 수 있습니다 :

var stringNumb: NSString = "1357"

var someNumb: CInt = stringNumb.intValue

그러나 나는 그것을 할 수있는 방법을 찾을 수 없습니다 String. 나는 다음과 같은 것을하고 싶다 :

var stringNumb: String = "1357"

var someNumb: Int = Int(stringNumb)

이것은 작동하지 않습니다 :

var someNumbAlt: Int = myString.integerValue

1
var someNumb: Int? = Int(stringNumb)또는var someNumb = Int(stringNumb)
— SwiftArchitect

답변:


179

Swift 2.0에서는 생성자를 사용하여 Integer를 초기화 할 수 있습니다

var stringNumber = "1234"
var numberFromString = Int(stringNumber)

14
Swift 2.0부터는 더 이상이 toInt()방법을 사용할 수 없습니다 String. 따라서이 Int생성자는 문자열을 정수로 변환하는 유일한 방법입니다.
— Morgan Wilde

1
세미콜론은 필요하지 않습니다
— Sebastian

사용자가 텍스트 필드에 Int64 한도 이상의 숫자를 입력하면 처리하는 방법을 알려주
— 시겠습니까?

1
@Sebastian은 그렇게 실망스럽지 않습니까? :)
— Victor

94

나는 사용할 것이다 :

var stringNumber = "1234"
var numberFromString = stringNumber.toInt()
println(numberFromString)

참고 toInt():

문자열이 Int에 맞는 정수를 나타내는 경우 해당 정수를 리턴합니다.


5
이것은 일을 명시 적으로 VAR를 선언하는 경우, 당신은 느낌표를 추가 할 필요가 있지만 : var someNumb: Int = stringNumber.toInt()!@NateCook는 지적
— 로건

명시 적으로 선언하지 않습니다. 컴파일러는 numberFromString이 1로 초기화 되었기 때문에 int 여야한다는 것을 알고 있습니다.
— CW0007007

나는 당신이 아니라는 것을 알고 있습니다. 그렇게 조정해야했습니다. 코드가 정확하고 주석으로 추가하십시오.
— 로건

예, 메모가 지적한 것처럼 값이 Int에 맞는 경우에만 값을 반환합니다. 그렇지 않으면 nil을 반환합니다.
— CW0007007

5
대신 퍼팅의 !전화에, 당신은 선택로 변수를 선언 할 수 있습니다 someNumb: Int? = stringNumber.toInt(). 그러면 유형 안전 시스템이 foo존재하지 않을 수 있음을 인식 합니다. !문자열을 숫자로 변환 할 수 없다면 퍼팅 은 물론 충돌합니다.
— gwcoffey 2016 년

18

스위프트 3.0

유형 1 : NSString을 문자열로 변환

    let stringNumb:NSString = "1357"
    let someNumb = Int(stringNumb as String) // 1357 as integer

유형 2 : 문자열에 정수만있는 경우

    let stringNumb = "1357"
    let someNumb = Int(stringNumb) // 1357 as integer

유형 3 : 문자열에 부동 값이있는 경우

    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"
    }

"Type 3"의 코드는 이상적이지 않습니다. stringToFloatis 를 확인하는 대신을 != nil사용해야합니다 if let.
— rmaddy

11

원하는 방법은 toInt()- toInt()선택적 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

그러나 마찬가지로 toInt()올바른 방법입니다. 옵션은 언어의 핵심 부분
— Jiaaro

물론, 당신은 당신이 똑 바른 Int가 아닌 옵션으로 작업하고 있다는 것을 알고 있어야합니다.
— Nate Cook

5

당신이 사용할 수있는 NSString경우에만.

objective-c와 매우 비슷합니다. 모든 데이터 유형이 있지만 as NSString추가가 필요합니다

    var 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()기능이 추가되었습니다. Apple Inc.“Swift Programming Language”를 참조하십시오. iBooks. https://itun.es/us/jEUH0.l 49 페이지

x.toInt()

을 추가하지 않았습니다 as NSString. @gwcoffey 수정
— John Riselvato

2
NSString을 사용하고 싶지 않습니다. 질문을 참조하십시오.
— 로건

4

위의 답변은 문자열 값이 "700.00"이므로 도움이되지 않았습니다.

와 스위프트 2.2 이 나를 위해 작동

let myString = "700.00"
let myInt = (myString as NSString).integerValue

NSFormatterClass에 myInt를 전달했습니다.

let formatter = NSNumberFormatter()
formatter.numberStyle = .CurrencyStyle
formatter.maximumFractionDigits = 0

let priceValue = formatter.stringFromNumber(myInt!)!

//Now priceValue is ₹ 700

이 블로그 게시물 덕분에 .


1
이 질문은 문자열에서 정수 를 얻는 것에 관한 것 입니다. 귀하의 경우에는 Int가 없으며 Double이 있습니다. Swift에서 Double()우리가 사용 하는 것과 같은 방식을 사용하십시오 Int(). NSString에 브리징을 사용할 필요가 없습니다.
— Eric Aya

안녕하세요 @EricD는 귀하의 제안에 감사하지만 " 통화 변환기를 위해 NSNumberFormatter 클래스에 Int를 전달할 때만 정수를 원했습니다 ".
— swiftBoy

1
그럼이 경우에 당신이 사용할 수있는 Double() 다음 사용 Int(). 이와 같이 : if let d = Double("700.00") { let i = Int(d); print (i) }:)
— Eric Aya

2

다음과 같이 String에서 NSString으로 브리지하고 CInt에서 Int로 변환 할 수 있습니다.

var myint: Int = Int(stringNumb.bridgeToObjectiveC().intValue)

1

그 목적을 위해 확장을 썼습니다. 항상을 반환합니다 Int. 문자열이에 맞지 않으면 Int0이 반환됩니다.

extension String {
    func toTypeSafeInt() -> Int {
        if let safeInt = self.toInt() {
            return safeInt
        } else {
            return 0
        }
    }
}

2
이것은보다 간결하게 쓸 수 있습니다 return self.toInt() ?? 0. 확장 방법을 사용하는 대신 인라인으로 작성하는 것이 좋습니다.
— jlong64

0

더 일반적인 해결책은 확장이 될 수 있습니다

extension String {
    var toFloat:Float {
        return Float(self.bridgeToObjectiveC().floatValue)
    }
    var toDouble:Double {
        ....
    }
    ....
}

예를 들어 빠른 기본 문자열 객체를 toFloat로 확장합니다.


0

Swift 2.0에서 문자열을 Int로 변환 :

var str:NSString = Data as! NSString
var cont:Int = str.integerValue

사용하다 .intergerValue or intValue for Int32


0

8 : 1 확률 (*)

var stringNumb: String = "1357"
var someNumb = Int(stringNumb)

또는

var stringNumb: String = "1357"
var someNumb:Int? = Int(stringNumb)

Int(String)옵션 반환 Int?이 아닌가 Int.


안전한 사용 : 명시 적으로 랩 해제하지 마십시오

let unwrapped:Int = Int(stringNumb) ?? 0

또는

if let stringNumb:Int = stringNumb { ... }

(*) 실제로 응답 var someNumb: Int = Int(stringNumb)하지 않은 이유 는 무엇입니까?


@ user3441734 감사합니다. 나는 캐스팅 을 사용해서는 안됩니다 .
— SwiftArchitect 5

0

간단하지만 더러운 방법

// 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)

확장 방법

로케일과 소수로 훌륭하게 재생되므로 실제로 더 좋습니다.

extension String {

    var numberValue:NSNumber? {
        let formatter = NSNumberFormatter()
        formatter.numberStyle = .DecimalStyle
        return formatter.numberFromString(self)
    }
}

이제 간단하게 할 수 있습니다 :

let someFloat = "42.42".numberValue
let someInt = "42".numberValue
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.