2014-11-22 7 views
5

मेरे पास एक स्ट्रिंग विवरण है जो मेरी सजा रखता है। मैं केवल पहले पत्र को पूंजीकृत करना चाहता हूं। मैंने अलग-अलग चीजों की कोशिश की लेकिन उनमें से ज्यादातर मुझे अपवाद और त्रुटियां देते हैं। प्रकार 'String.Index' प्रोटोकॉल के अनुरूप नहीं है 'IntegerLiteralConvertible'वाक्य के पहले चार को कैपिटल करना (स्विफ्ट)

मैं

की कोशिश की: का उपयोग कर इम Xcode 6.

यहाँ मैं अब तक की कोशिश की

let cap = [description.substringToIndex(advance(0,1))] as String 
    description = cap.uppercaseString + description.substringFromIndex(1) 

यह मुझे देता है

func capitalizedStringWithLocale(locale:0) -> String 

लेकिन मैं यह नहीं समझ सकता कि इसे कैसे काम करना है। कोई विचार?

उत्तर

2
import Foundation 

// A lowercase string 
let description = "the quick brown fox jumps over the lazy dog." 

// The start index is the first letter 
let first = description.startIndex 

// The rest of the string goes from the position after the first letter 
// to the end. 
let rest = advance(first,1)..<description.endIndex 

// Glue these two ranges together, with the first uppercased, and you'll 
// get the result you want. Note that I'm using description[first...first] 
// to get the first letter because I want a String, not a Character, which 
// is what you'd get with description[first]. 
let capitalised = description[first...first].uppercaseString + description[rest] 

// Result: "The quick brown fox jumps over the lazy dog." 

के रूप में अन्यथा आप स्ट्रिंग के अंत से परे सूचकांक अग्रिम करने के लिए कोशिश कर रहा एक रनटाइम त्रुटि मिल जाएगा आप, आपकी वाक्य में कम से कम एक चरित्र है इससे पहले कि आप शुरू यह सुनिश्चित करना चाहते हो सकता है।

8

स्विफ्ट 2 में, आप String(text.characters.first!).capitalizedString + String(text.characters.dropFirst())

+0

इसके अलावा, अगर आप चाहते हैं वास्तव में एक केवल पहला अक्षर" जॉन "या" डो "और नहीं" जॉन "और" डो "की तरह स्ट्रिंग को कैपिटल, आप निम्न कर सकते । फर्स्ट!)। पूंजीकृत स्ट्रिंग + स्ट्रिंग (text.characters.dropFirst())। lowcased() ' – KingChintz

3

एक और संभावना स्विफ्ट 3 में कर सकते हैं -

extension String { 
    func capitalizeFirst() -> String { 
     let firstIndex = self.index(startIndex, offsetBy: 1) 
     return self.substring(to: firstIndex).capitalized + self.substring(from: firstIndex).lowercased() 
    } 
} 

संपादित स्विफ्ट 4 के लिए स्विफ्ट 3 ऊपर से
चेतावनी code-

'substring (to :)' को बहिष्कृत किया गया है: कृपया 'pa' के साथ स्ट्रिंग स्लाइसिंग सबस्क्रिप्ट का उपयोग करें 'ऑपरेटर तक rtial रेंज।
'सबस्ट्रिंग (से :)' को बहिष्कृत किया गया है: कृपया 'आंशिक रेंज से' ऑपरेटर के साथ स्ट्रिंग स्लाइसिंग सबस्क्रिप्ट का उपयोग करें।

स्विफ्ट 4 समाधान -

extension String { 
    var capitalizedFirst: String { 
     guard !isEmpty else { 
      return self 
     } 

     let capitalizedFirstLetter = charAt(i: 0).uppercased() 
     let secondIndex    = index(after: startIndex) 
     let remainingString   = self[secondIndex..<endIndex] 

     let capitalizedString  = "\(capitalizedFirstLetter)\(remainingString)" 
     return capitalizedString 
    } 
} 
1

यहाँ कैसे स्विफ्ट 4 में यह करने के लिए है, सिर्फ मामले में अगर यह मदद करता है किसी को भी:

extension String { 
    func captalizeFirstCharacter() -> String { 
     var result = self 

     let substr1 = String(self[startIndex]).uppercased() 
     result.replaceSubrange(...startIndex, with: substr1) 

     return result 
    } 
} 

यह मूल String उत्परिवर्तित नहीं होंगे।

1
extension String { 
var capitalizedFirstLetter:String { 
    let string = self 
    return string.replacingCharacters(in: startIndex...startIndex, with: String(self[startIndex]).capitalized) 
} 

}

let newSentence = sentence.capitalizedFirstLetter 
0

एक के लिए या स्ट्रिंग में प्रत्येक शब्द, आप स्ट्रिंग के .capitalized संपत्ति का उपयोग कर सकते हैं। `स्ट्रिंग (text.characters:

print("foo".capitalized) //prints: Foo 

print("foo foo foo".capitalized) //prints: Foo Foo Foo 
संबंधित मुद्दे