快速从字符串中获取整数值

问题描述 投票:0回答:13

所以我可以这样做:

var stringNumb: NSString = "1357"

var someNumb: CInt = stringNumb.intValue

但是我找不到用

String
来做到这一点的方法。我想做这样的事情:

var stringNumb: String = "1357"

var someNumb: Int = Int(stringNumb)

这也不起作用:

var someNumbAlt: Int = myString.integerValue
swift swift2
13个回答
181
投票

Swift 2.0您可以使用构造函数初始化 Integer

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

94
投票

我会用:

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

注意

toInt()

如果字符串表示适合 Int 的整数,则返回相应的整数。


18
投票

在 Swift 3.0 中

类型1:将NSString转换为String

    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:如果字符串具有 Float 值

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

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

6
投票

如果您只能使用

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 编程语言”。 iBooks。 https://itun.es/us/jEUH0.l第49页

x.toInt()

4
投票

上面的答案对我没有帮助,因为我的字符串值为“700.00”

使用 Swift 2.2 这对我有用

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

我将 myInt 传递给 NSFormatterClass

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

let priceValue = formatter.stringFromNumber(myInt!)!

//Now priceValue is ₹ 700

感谢这个博客文章。


3
投票

您可以从 String 桥接到 NSString 并从 CInt 转换为 Int,如下所示:

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

1
投票

我为此目的编写了一个扩展。它总是返回一个

Int
。如果字符串不适合
Int
,则返回 0。

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

0
投票

更通用的解决方案可能是扩展

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

例如,通过 toFloat 扩展 swift 原生 String 对象


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)
不起作用的原因。


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

0
投票

在 Swift 2.0 中将 String 转换为 Int:

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

使用

.integerValue or intValue for Int32


0
投票

Swift 5+ 快乐编码

using below extension
print("8abc2214ma3".getIntegerValue())

//Output
822143



extension String {
    func getIntegerValue() -> String {
        //let okayChars : Set<Character> =
        //            Set("abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLKMNOPQRSTUVWXYZ1234567890+-*=(),.:!_".characters)
        let digitArray = self.split(separator: ".")
        var value = ""
        if digitArray.count > 0 {
            value = String(digitArray[0])
        }
        else {
            value = self
        }
        let okayChars : Set<Character> =
        Set("1234567890")
        let output = String(value.filter {okayChars.contains($0)})
        print(output)
        return output
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.