2014-10-23 3 views
5

Мне нужны заглавные буквы из строки. С NSString он STH нравится:Как выбрать заглавные буквы из строки Swift?

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

    let c = str.characterAtIndex(i) 

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

В Swift начинается как:

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

Но я не знаю, то, как выбрать я-й символ, я проверяю this

ответ

4

Для например, эта работа штрафа в Свифте:

var st = "Hello World" 

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

И печать

H 
W 

Или вы могли бы вместо этого:

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

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

Или решение @Gabrielle обновлено до Swift 2.0:

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

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

@ Янош этого http://oleb.net/blog/2014/07/swift- strings/может помочь многим заниженным строкам в Swift. –

5

Вот несколько более идиоматических версия в быстром

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

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

или даже:

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

capitalLetters("fOo BAr") 

или же, вы могли бы сделать синтаксис приятнее, предоставляя расширение

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

"fOo BAr".capitalLetters() 
+1

На самом деле вам не нужно сначала '' '' Array', если вы используете глобальную функцию 'filter', и вы можете использовать диапазон, чтобы сделать его более кратким:' filter ("fOo BAr") { («A» ... «Z»). Содержит ($ 0)} ' –

+0

@MikeS приятно, спасибо! Я обновлю свой ответ –