保持する有効な文字のみを指定できる stringFromCharactersInSet() のようなものがあることを望んでいました。
文字セットとともに使用trimmingCharacters
して、inverted
文字列の先頭または末尾から文字を削除できます。Swift 3 以降では:
let result = string.trimmingCharacters(in: CharacterSet(charactersIn: "0123456789.").inverted)
または、文字列の任意の場所 (開始または終了だけでなく) の数値以外の文字を削除する場合filter
はcharacters
、たとえば Swift 4.2.1 で次のようにします。
let result = string.filter("0123456789.".contains)
または、文字列内の任意の場所から CharacterSet から文字を削除する場合は、次を使用します。
let result = String(string.unicodeScalars.filter(CharacterSet.whitespaces.inverted.contains))
または、特定の形式 (例: ) の有効な文字列のみを一致させたい場合は、####.##
正規表現を使用できます。例えば:
if let range = string.range(of: #"\d+(\.\d*)?"#, options: .regularExpression) {
let result = string[range] // or `String(string[range])` if you need `String`
}
これらの異なるアプローチの動作はわずかに異なるため、何をしようとしているのかによって異なります。小数または整数のみが必要な場合は、小数点を含めるか除外します。これを実現する方法はたくさんあります。
古い Swift 2 構文については、この回答の以前のリビジョンを参照してください。