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ć trimmingCharactersz invertedzestawem 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:filtercharacters
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 .
invertedna zestawie znaków w przykładzie Swift 3?