【问题标题】:Get integer value from string in swift快速从字符串中获取整数值
【发布时间】:2014-07-24 00:41:51
【问题描述】:

所以我可以这样做:

var stringNumb: NSString = "1357"

var someNumb: CInt = stringNumb.intValue

但我找不到使用String 的方法。我想做类似的事情:

var stringNumb: String = "1357"

var someNumb: Int = Int(stringNumb)

这也不起作用:

var someNumbAlt: Int = myString.integerValue

【问题讨论】:

  • var someNumb: Int? = Int(stringNumb)var someNumb = Int(stringNumb)

标签: swift swift2


【解决方案1】:

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

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

【讨论】:

  • 从 Swift 2.0 开始,您不再将 toInt() 方法作为 String 的一部分。所以这个Int 构造函数现在是将字符串转换为整数的唯一方法。
  • 分号不是必须的
  • 如果用户在文本字段中输入的数字超过 Int64 限制数字,您能告诉您如何处理
  • @Sebastian 是不是很沮丧? :)
【解决方案2】:

我会使用:

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

注意toInt()

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

【讨论】:

  • 这行得通,虽然如果你明确声明 var,你需要添加一个感叹号:var someNumb: Int = stringNumber.toInt()!@NateCook 指出
  • 我没有明确声明。编译器知道 numberFromString 应该是一个 int 因为它被初始化为...
  • 我知道你不是,但我是。我必须做出调整才能做到这一点。您的代码是正确的,只需将其添加为注释即可。
  • 是的,它只返回一个值,如果该值符合注释指出的 Int 。否则返回 nil...
  • 您可以将变量声明为可选:someNumb: Int? = stringNumber.toInt(),而不是在调用中添加!。然后类型安全系统将意识到foo 可能不存在。如果您的字符串无法转换为数字,则输入! 当然会崩溃。
【解决方案3】:

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

【讨论】:

  • “类型 3”的代码并不理想。而不是检查stringToFloat!= nil,你应该使用if let
【解决方案4】:

你想要的方法是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() 是正确的做法。选项是语言的核心部分
  • 当然,您只需要注意您使用的是可选的,而不是直接的 Int。
【解决方案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. “The Swift Programming Language”。电子书。 https://itun.es/us/jEUH0.l第49页

x.toInt()

【讨论】:

  • 忘记添加as NSString。修复它@gwcoffey
  • 我不想使用 NSString,请看问题。
【解决方案6】:

以上答案对我没有帮助,因为我的字符串值为“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

感谢this 博文。

【讨论】:

  • 这个问题是关于从字符串中获取一个整数。在你的情况下,你没有一个 Int,你有一个 Double。在 Swift 中,只需像使用 Int() 一样使用 Double()。无需使用到 NSString 的桥接。
  • 嘿@EricD 感谢您的建议,但“我只想要整数,因为我将 Int 传递给 NSNumberFormatter 类以进行货币转换器”。
  • 那么在这种情况下你可以使用Double() 然后使用Int()。像这样:if let d = Double("700.00") { let i = Int(d); print (i) } :)
【解决方案7】:

您可以像这样从 String 桥接到 NSString 并从 CInt 转换为 Int:

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

【讨论】:

    【解决方案8】:

    为此我写了一个扩展。它总是返回一个Int。如果字符串不适合 Int,则返回 0。

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

    【讨论】:

    • 这可以更简洁地写成return self.toInt() ?? 0。以这种方式内联编写它可能比为此使用扩展方法更好。
    【解决方案9】:

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

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

    this 例如通过 toFloat 扩展了 swift 本机 String 对象

    【讨论】:

      【解决方案10】:

      在 Swift 2.0 中将 String 转换为 Int:

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

      使用.intergerValue or intValue for Int32

      【讨论】:

        【解决方案11】:

        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。我不应该使用 casting
        【解决方案12】:

        简单但肮脏的方式

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-12-13
          • 1970-01-01
          • 2011-07-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-30
          • 1970-01-01
          相关资源
          最近更新 更多