【问题标题】:Take number from string value in Swift从 Swift 中的字符串值中获取数字
【发布时间】:2015-09-15 08:24:26
【问题描述】:

我有一个带有数字的文本值,该数字从零开始。例如"User number 054321",我通过下面的代码从文本中获取这个数字。

var phonenumber = "054321"

let myNumber = NSNumberFormatter().numberFromString("".join(phonenumber.componentsSeparatedByCharactersInSet(NSCharacterSet.decimalDigitCharacterSet().invertedSet)))

println(myNumber) //54321

我的问题是它从不接受以 0 值开头的第一个数字,但它接受所有其他数字。那么请问我的问题在哪里?

【问题讨论】:

  • 数值的神奇之处在于0010000101是同一个数字——数字1;如果您想保留输入的整个电话号码(带有前导零、数字或加号),则必须保留为字符串。
  • @holex 好的。所以我必须把它写成“0(myNumber!)”??还是有更好的办法?
  • 我认为更好的方法是根本不将其转换为数值,因为054321004454321+4454321 意味着精确 相同的电话号码,例如英国。想想当您开始将它们转换为数值并稍后强制添加前导零时您会得到什么......您将得到04454321054321,这是两个完全不同的电话号码,您可以确保其中一个是完全invalid,而原始输入是valid
  • 感谢您提供详细信息@holex

标签: ios swift nsnumber nsnumberformatter


【解决方案1】:

数字不能以 0 开头。或者至少,永远不会以 0 作为第一个字符来显示。 054321 = 54321 = 0000000000054321 但最后还是54321

无论如何,电话号码不应存储为数字,而应存储为字符串,因为它可能以“0”或“+”开头。

TL;DR:如果您想将 0 保留在数字的开头,请将其存储为字符串。

【讨论】:

  • 好的。所以我必须把它写成“0(myNumber!)”??还是有更好的办法?
  • 忘记这是一个数字并将其作为字符串处理。这是一个电话号码=它是一个字符串。如果您开始更改用户提供的电话号码,您可能会遇到问题。
【解决方案2】:

使用以下代码从String 获取Int

let myString : String = "123"
let myInt: Int? = myString.toInt()

if myInt != nil {
    println(myInt)
}

或者,如果您使用的是 Swift 2:

let myInt: Int? = Int(myString)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多