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


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 is700

블로그 게시물 덕분에 .


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.