在Swift 2.0中将Character转换为Int

Aar*_*ron 28 int character swift swift-playground swift2

我只想将一个角色转换成一个Int.

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

for i in (unsolved.characters) {
  fileLines += String(i).toInt()
  print(i)
}
Run Code Online (Sandbox Code Playgroud)

Aar*_*ger 47

在Swift 2.0 toInt()等中,已经被初始化程序取代.(在这种情况下,Int(someString).)

因为并非所有字符串都可以转换为int,所以这个初始化程序是可用的,这意味着它返回一个可选的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)
}
Run Code Online (Sandbox Code Playgroud)

或者,对于Swiftier解决方案:

let unsolved = "123abc"

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

// fileLines = [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

你可以用以下方法缩短这个flatMap:

let fileLines = unsolved.characters.flatMap { Int(String($0)) }
Run Code Online (Sandbox Code Playgroud)

flatMap返回"一个Array含有映射的非零结果transformself" ......所以当Int(String($0))nil时,结果被丢弃.


Mil*_*iuM 9

这是我想出的一些即兴技巧.因为它可能会非常棘手转换CharacterInt,但是你可以很容易地转换StringInt 这样做:

fileLines = Int(String(i))!
Run Code Online (Sandbox Code Playgroud)

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