问题
How can you use the "ctype.h" library in Swift to be able to use isAlpha
or isSpace
on characters? Or is there a better, Swift, way of doing it?
This question is answered, but it doesn't seem to work: Swift: how to find out if letter is Alphanumeric or Digit
It doesn't specify how to import the library. Could someone point me in the right direction?
Here's what I've got so far:
extension String {
subscript (i : Int) -> String {
return String(Array(self)[i])
}
}
let whitespace = NSCharacterSet.whitespaceCharacterSet()
let phrase = "Test case"
for var i=0; i<countElements(phrase); i++ {
if whitespace.characterIsMember(phrase[i]) { //error
println("char is whitespace")
}
}
回答1:
Use NSCharacter on the entire string,not character-by-character:
let whitespace = NSCharacterSet.whitespaceCharacterSet()
let phrase = "Test case"
let range = phrase.rangeOfCharacterFromSet(whitespace)
// range will be nil if no whitespace is found
if let test = range {
println("whitespace found")
}
else {
println("whitespace not found")
}
Output:
whitespace found
回答2:
Shorter extension (swift 4.1)
extension String {
var containsWhitespace : Bool {
return(self.rangeOfCharacter(from: .whitespacesAndNewlines) != nil)
}
}
You can change the .whitespacesAndNewlines
with any other CharacterSet
like this:
extension String {
var containsDigits : Bool {
return(self.rangeOfCharacter(from: CharacterSet.decimalDigits) != nil)
}
}
回答3:
I created a String extension that does exactly this, hope it's useful.
extension String {
func containsWhiteSpace() -> Bool {
// check if there's a range for a whitespace
let range = self.rangeOfCharacterFromSet(.whitespaceCharacterSet())
// returns false when there's no range for whitespace
if let _ = range {
return true
} else {
return false
}
}
}
回答4:
This answer works with text fields. I was going crazy trying to search for whitespace on a UItextfield without searching the string content of it. This works for UItextfields:
Swift 4:
if (textField.text?.contains(" "))!{
print("Has space")
}else{
print("Does not have space")
}
This is for a regular string, also in swift 4
if string.contains(" "){
print("Has space")
}else{
print("Does not have space")
}
回答5:
For Swift 5
extension String {
func containsWhiteSpace() -> Bool {
// check if there's a range for a whitespace
let range = self.rangeOfCharacter(from: .whitespacesAndNewlines)
// returns false when there's no range for whitespace
if let _ = range {
return true
} else {
return false
}
}
}
来源:https://stackoverflow.com/questions/24883924/how-can-i-check-to-see-if-a-string-contains-characters-of-whitespace-alphanumeri