2016-02-09 10 views
6

तक सीमित करें मेरे पास निम्न नाम है: John Fitzgerald Kennedyनाम से प्रारंभिक प्राप्त करें और इसे 2 प्रारंभिक

अपने नाम के पहले अक्षर, मैं एक विधि बनाया पाने के लिए:

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

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

उत्पादन होता है: JFK

केवल JK करने के लिए उन के पहले अक्षर को सीमित करने (कम करने के साथ) मेरी विधि के साथ एक सुंदर तरीका नहीं है, बीच में पत्र को हटा देना?

+0

ध्यान दें कि यह कई गैर अंग्रेजी नामों के लिए टूट जाएगा। स्पेनिश नामों में नाम के अंतिम भाग को सबसे महत्वपूर्ण नहीं होना चाहिए। और मुझे एशियाई नामों पर भी शुरू नहीं होने दें। यदि आपको सही प्रारंभिक आवश्यकता है, तो आपको उपयोगकर्ता को उन्हें भरने की आवश्यकता है। – Sulthan

+0

हां मैं उपयोगकर्ता को इसे बदलने का तरीका देने का विचार कर रहा था। धन्यवाद। – Nico

उत्तर

12

स्विफ्ट 2.0

इस बारे में कैसे:

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

कि भी मामले में जहां नाम नहीं मध्य नाम या 1 से अधिक मध्य नाम है का ख्याल रखना होगा।

स्विफ्ट 3

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

स्विफ्ट 4

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

अच्छा! धन्यवाद। – Nico

+0

हाय मुझे त्रुटि मिल रही है: 'सबस्क्रिप्ट' अनुपलब्ध है: एक गणना योग्य क्लोज़रेंज के साथ स्ट्रिंग को सब्सक्राइब नहीं कर सकता है, चर्चा के लिए प्रलेखन टिप्पणी देखें .... स्विफ्ट 3+ में यह संस्करण क्या है? –

+0

यह स्विफ्ट 2.0 है ... मैं –

0

की गणना और अजीब सूचकांक द्वारा फिल्टर

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

नोट: यह एक नहीं मध्य नाम के बारे में परवाह नहीं है या एक से अधिक

+0

अपडेट करूंगा यदि पूरा नाम 1 से अधिक मध्य नाम है, या कोई मध्य नाम नहीं है? यह काम नहीं करेगा .. –

+0

हाँ, आप सही हैं, आपका समाधान बहुत बेहतर है – avdyushin

संबंधित मुद्दे