2016-02-09 19 views
6

Mam następującą nazwę: John Fitzgerald Kennedy.Uzyskaj inicjały od imienia i ograniczenia do 2 inicjałów

Aby uzyskać jego inicjały, stworzyłem metodę:

extension String { 
    public var first: String { 
     return String(self[startIndex]) 
    } 
} 

let initials = "John Fitzgerald Kennedy".componentsSeparatedByString(" ") 
     .reduce("") { $0 + $1.first } 

Wyjście jest: JFK

Czy istnieje elegancki sposób z moją metodą (z zmniejszyć), aby ograniczyć te inicjały tylko JK, usunięcie listu w środku?

+0

Należy zauważyć, że spowoduje to złamanie wielu nieangielskojęzycznych nazw. W nazwach hiszpańskich ostatnia część nazwy nie musi być najważniejsza. I nie pozwól mi nawet zaczynać od azjatyckich nazwisk. Jeśli potrzebujesz poprawnych inicjałów, musisz je wypełnić. – Sulthan

+0

Tak, myślałem, aby dać użytkownikowi sposób, aby to zmienić. Dzięki. – Nico

Odpowiedz

12

Swift 2.0

Jak o tym:

let initials = "John Fitzgerald Kennedy".componentsSeparatedByString(" ") 
.reduce("") { ($0 == "" ? "" : $0.first) + $1.first} 

To będzie również dbać o przypadku, gdy nazwa nie ma drugiego imienia lub więcej niż 1 drugie imię.

Swift 3

let initials = "John Fitzgerald Kennedy".components(separatedBy: " ").reduce("") { ($0 == "" ? "" : "\($0.characters.first!)") + "\($1.characters.first!)" } 

Swift 4

let initials = "John Fitzgerald Kennedy".components(separatedBy: " ").reduce("") { ($0 == "" ? "" : "\($0.first!)") + "\($1.first!)" } 
+0

Nice! Dziękuję Ci. – Nico

+0

Cześć Otrzymuję błąd: "indeks dolny" jest niedostępny: nie mogę zasubskrybować łańcucha znaków za pomocą CountableClosedRange , zobacz komentarz do dokumentacji do dyskusji .... W Swift 3+ Jaka jest ta wersja swift? –

+0

To jest Swift 2.0 ... Zaktualizuję –

0

Wyliczanie i filtr przez indeks nieparzystej

let initials = "John Fitzgerald Kennedy".componentsSeparatedByString(" ") 
    .enumerate() 
    .filter { (index, _) -> Bool in return index % 2 == 0 } 
    .reduce("") { a, i in return a + i.element.first } 

Uwaga: to nie jest dbać o żadnym drugie imię lub więcej niż jeden

+0

Co się stanie, jeśli imię i nazwisko będzie miało więcej niż jedno drugie imię lub drugie imię? To by nie zadziałało. –

+0

Tak, masz rację, twoje rozwiązanie jest o wiele lepsze – avdyushin