2014-10-23 11 views
5

Ich brauche Großbuchstaben aus einer Zeichenfolge. Mit NSString wurde es etw mag:Wie Sie Großbuchstaben aus einer Swift-Zeichenfolge auswählen?

for (var i = 0; i<str.length; i++) { 

    let c = str.characterAtIndex(i) 

    if c >= 'A' && c < 'Z' { 
     //.. 
    } 
} 

In Swift beginnt es wie:

for (var i = 0; i<countElements(str); i++) { 
    //.. 
} 

Aber ich weiß nicht, das heißt, wie i-te Zeichen holen, ich bin Überprüfung this

Antwort

4

Für Beispiel das funktioniert gut in Swift:

var st = "Hello World" 

for ch in st { 
    if ch >= "A" && ch <= "Z"{ 
     println(ch) 
    } 
} 

Und Drucken

H 
W 

Oder Sie könnten Sie stattdessen:

var range = "A"..."Z" 

for ch in st { 
    if range.contains(String(ch)) { 
     println(ch) 
    } 
} 

Oder die Lösung von @Gabrielle aktualisiert Swift 2.0:

func capitalLetters(s: String) -> [Character] { 
    return s.characters.filter { ("A"..."Z").contains($0) } 
} 

capitalLetters("fOo BAr") // ["O", "B", "A"] 
+1

@ János dieser http://oleb.net/blog/2014/07/swift- Strings/könnte viel dazu beitragen, Strings in Swift zu verstehen. –

5

Hier ist eine etwas mehr idiomatische Version in schnellen

func capitalLetters(s: String) -> [Character] { 
    return filter(s) { ("A"..."Z").contains($0) } 
} 

capitalLetters("fOo BAr") // ["O", "B", "A"] 

oder sogar:

func capitalLetters(s: String) -> [Character] { 
    func isCapital(c: Character) -> Bool { 
     return ("A"..."Z").contains(c) 
    } 
    return filter(s, isCapital) 
} 

capitalLetters("fOo BAr") 

oder auch, könnte man die Syntax schöner machen, indem eine Erweiterung bietet

extension String { 
    func capitalLetters() -> [Character] { 
     func isCapital(c: Character) -> Bool { 
      return ("A"..."Z").contains(c) 
     } 
     return filter(self, isCapital) 
    } 
} 

"fOo BAr".capitalLetters() 
+1

Sie müssen nicht zuerst 's' ein' Array' machen, wenn Sie die globale 'filter' Funktion verwenden, und Sie können einen Bereich verwenden, um es ein bisschen prägnanter zu machen:' filter ("fOo BAr") { ("A" ... "Z"). Enthält ($ 0)} ' –

+0

@MikeS nett, danke! Ich werde meine Antwort aktualisieren –

Verwandte Themen