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).)

すべての文字列を intに変換できるわけではないため、このイニシャライザはfailableです。つまり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)
}

または、Swifter ソリューションの場合:

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

flatMapArray「マッピングの nil 以外の結果を含むantransformを返す」self… の場合、結果Int(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 2.o で String を Int に変換することです。

let chars = Int(chars)

これがあなたがしようとしているものかどうかはわかりません...しかし、もちろん、これをループに簡単に適用できます。

于 2015-09-17T20:38:56.107 に答える