Możliwym Swift rozwiązanie:
var letterCounter = 0
var digitCount = 0
let phrase = "The final score was 32-31!"
for tempChar in phrase.unicodeScalars {
if tempChar.isAlpha() {
letterCounter++
} else if tempChar.isDigit() {
digitCount++
}
}
Aktualizacja: Powyższe rozwiązanie działa tylko z postaciami z zestawu znaków ASCII, to znaczy, że nie rozpoznaje A, E lub O jako litery. Poniższy Alternatywnym rozwiązaniem wykorzystuje NSCharacterSet
z ram Fundacji, która może sprawdzić wygląd znaków na podstawie swoich klas znaków Unicode:
let letters = NSCharacterSet.letterCharacterSet()
let digits = NSCharacterSet.decimalDigitCharacterSet()
var letterCount = 0
var digitCount = 0
for uni in phrase.unicodeScalars {
if letters.longCharacterIsMember(uni.value) {
letterCount++
} else if digits.longCharacterIsMember(uni.value) {
digitCount++
}
}
UPDATE 2: Od Xcode 6 beta 4, pierwsze rozwiązanie nie nie działa, ponieważ metody isAlpha()
i pokrewne (tylko ASCII) zostały usunięte z Swift. Drugie rozwiązanie nadal działa.
Aktualizacja Swift 3:
let letters = CharacterSet.letters
let digits = CharacterSet.decimalDigits
var letterCount = 0
var digitCount = 0
for uni in phrase.unicodeScalars {
if letters.contains(uni) {
letterCount += 1
} else if digits.contains(uni) {
digitCount += 1
}
}
Tak, to idealna - jak do cholery się dowiedziałeś o "isalpha" i " isDigit "????? :-) Nie wiedziałem nawet, że istnieją. (Poważnie - czy sprawdziłeś je, czy też już do nich dotarłeś w poprzednich podróżach?) – sirab333
@ sirab333: 'isalpha()' i przyjaciele są dobrze znani w C, zobacz np. https://developer.apple.com/library/ios/documentation/System/Conceptual/ManPages_iPhoneOS/man3/ctype.3.html#//apple_ref/doc/man/3/ctype. Tak więc miałem "tylko", aby dowiedzieć się, jak korzystać z nich od Swift. - Ale pamiętaj, że działa to tylko dla znaków ASCII. Nie rozpoznaje liter z "języków obcych", takich jak "ä", "è" lub "ø". –
i rozpoznaje '+' i '-' jako cyfrę –