Ответ 1
Я считаю это решение в Swift 3 более чистым
import Foundation
CharacterSet.decimalDigits.isSuperset(of: CharacterSet(charactersIn: yourString))
Я перепробовал много дел, но ни один из них не работает для меня. Я старался:
if resultTitles[indexPath.row].rangeOfCharacterFromSet(badCharacters) == nil {
let badCharacters = NSCharacterSet.decimalDigitCharacterSet().invertedSet
print("Index: \(indexPath.row)")
}
также пытался
if ((resultTitles[0].toInt()) != nil) {
print("ERROR")
}
Итак, как я могу проверить, что мой текст содержит только цифры?
Я считаю это решение в Swift 3 более чистым
import Foundation
CharacterSet.decimalDigits.isSuperset(of: CharacterSet(charactersIn: yourString))
Вам просто нужно проверить, является ли Set
символов вашего String
подмножеством Set
, содержащим символы от 0 до 9.
extension String {
var isNumeric: Bool {
guard self.characters.count > 0 else { return false }
let nums: Set<Character> = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
return Set(self.characters).isSubset(of: nums)
}
}
"".isNumeric // false
"No numbers here".isNumeric // false
"123".isNumeric // true
"Hello world 123".isNumeric // false
Попробуйте с этим
let numbersTest = resultTitles[indexPath.row]
if let number = Int(numbersTest){
print(number)//contains onlyy number
}else{
print("notnumber")//Not number
}
В продолжение фантастической работы Луки, приведенной выше, приведен ответ, написанный в Swift 5.
extension String {
var isNumeric: Bool {
guard self.count > 0 else { return false }
let nums: Set<Character> = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
return Set(self).isSubset(of: nums)
}
}
Ваши первые варианты работают для меня на детской площадке. Проверьте его снова. Предполагая str = resultTitles[indexPath.row]
func isStringContainsOnlyNumbers(string: String) -> Bool {
return string.rangeOfCharacterFromSet(NSCharacterSet.decimalDigitCharacterSet().invertedSet) != nil
}
// Now let try to use it
let str = "Hello, playground"
if (isStringContainsOnlyNumbers(str)) {
print("\(str) has illegal characters") // "Hello, playground has illegal characters"
}
else {
print("\(str) has only number")
}
let numStr = "332432"
if (isStringContainsOnlyNumbers(numStr)) {
print("\(numStr) has illegal characters")
}
else {
print("\(numStr) has only number") // "332432 has only number\n"
}
Это может вам помочь.
let string = "536783"
let num = Int(string);
if num != nil {
print("Valid Integer")
}
else {
print("Not Valid Integer")
}
Попробуйте следующее:
if ( [resultTitles[indexPath.row] isMatchedByRegex:@"^(?:|0|[1-9]\\d*)(?:\\.\\d*)?$"] ) {
//Text is only numeric
}
else
{
//Text is not only numeric
}
Самый чистый способ Swift
, на мой взгляд, заключается в следующем:
extension String {
var isDigits: Bool {
guard !self.isEmpty else { return false }
return !self.contains { Int(String($0)) == nil }
}
}
"123".isDigits // returns true
"12d".isDigits // returns false