Miałem nadzieję, że będzie coś takiego jak stringFromCharactersInSet (), które pozwolą mi określić tylko prawidłowe znaki do zachowania.
Możesz użyć trimmingCharacters
z inverted
zestawem znaków, aby usunąć znaki z początku lub końca łańcucha. W wersji Swift 3 i nowszych:
let result = string.trimmingCharacters(in: CharacterSet(charactersIn: "0123456789.").inverted)
Albo, jeśli chcesz usunąć nienumeryczny znaków w dowolnym miejscu w ciągu (nie tylko początek lub koniec), można , np Swift 4.2.1:filter
characters
let result = string.filter("0123456789.".contains)
Lub, jeśli chcesz usunąć znaki z zestawu znaków z dowolnego miejsca w ciągu, użyj:
let result = String(string.unicodeScalars.filter(CharacterSet.whitespaces.inverted.contains))
Lub, jeśli chcesz dopasować tylko prawidłowe ciągi znaków w określonym formacie (np. ####.##
), Możesz użyć wyrażenia regularnego. Na przykład:
if let range = string.range(of: #"\d+(\.\d*)?"#, options: .regularExpression) {
let result = string[range]
}
Zachowanie tych różnych podejść nieco się różni, więc zależy tylko od tego, co dokładnie próbujesz zrobić. Uwzględnij lub wyklucz przecinek dziesiętny, jeśli chcesz mieć liczby dziesiętne lub tylko liczby całkowite. Można to osiągnąć na wiele sposobów.
W przypadku starszej składni Swift 2 zobacz poprzednią wersję tej odpowiedzi .
inverted
na zestawie znaków w przykładzie Swift 3?