30

我只想将字符转换为Int

这应该很简单。但我还没有发现以前的答案有帮助。总是有一些错误。也许是因为我正在 Swift 2.0 中尝试它。

for i in (unsolved.characters) {
  fileLines += String(i).toInt()
  print(i)
}
4

5 回答 5

47

在 Swift 2.0 中toInt(), 等已被初始化器取代。(在这种情况下,Int(someString)。)

因为并非所有字符串都可以转换为整数,所以这个初始化程序是failable,这意味着它返回一个可选的 int ( Int?) 而不仅仅是一个Int. 最好的办法是使用if let.

我不确定你到底要做什么,但这段代码在 Swift 2 中工作,并完成了我认为你正在尝试做的事情:

let unsolved = "123abc"

var fileLines = [Int]()

for i in unsolved.characters {
    let someString = String(i)
    if let someInt = Int(someString) {
        fileLines += [someInt]
    }
    print(i)
}

或者,对于更快捷的解决方案:

let unsolved = "123abc"

let fileLines = unsolved.characters.filter({ Int(String($0)) != nil }).map({ Int(String($0))! })

// fileLines = [1, 2, 3]

您可以通过以下方式进一步缩短flatMap

let fileLines = unsolved.characters.flatMap { Int(String($0)) }

flatMap返回“一个包含映射的Array非零结果”......所以当是时,结果被丢弃。transformselfInt(String($0))nil

于 2015-06-11T03:43:14.663 回答
9

这是我想出的一个即兴技巧。由于转换Character为可能很棘手Int,但您可以轻松地转换StringInt

fileLines = Int(String(i))!

当然,这不是很好的优化,但对于像你这样的情况,它可以做到这一点。

于 2016-10-14T14:17:55.593 回答
3

在最新的 Swift 版本中(至少在 Swift 5 中),您不需要对String.

Character具有wholeNumberValue尝试将字符转换为并在字符不代表整数Int时返回的属性。nil

let char: Character = "5"
if let intValue = char.wholeNumberValue {
    print("Value is \(intValue)")
} else {
    print("Not an integer")
}
于 2019-07-23T04:18:57.023 回答
3

实际上。一个更简单的方法是在 Swift 2.o 中将 String 转换为 Int 是:

let chars = Int(chars)

不确定这是否是您要尝试的...但是您当然可以轻松地将其应用于循环。

于 2015-09-17T20:38:56.107 回答
3

斯威夫特 4 解决方案

要将 a 转换Character为 a String

let digit = Int(String("1"))! 
//Don't force unwrap this if you're not 100% sure your character is a digit

OP问题的解决方案:

let fileLines = unsolved.compactMap{ Int(String($0) }
// fileLines = [1, 2, 3]
于 2018-05-27T18:42:26.940 回答