2014-11-22 9 views
5

Cümlenimi tutan bir String açıklaması var. Sadece ilk harfi büyütmek istiyorum. Farklı şeyler denedim ama çoğu bana istisnalar ve hatalar veriyor. Tür 'String.Index' protokole uymuyor 'IntegerLiteralConvertible'İlk cümle karakterini ilklendirme (Swift)

Ben

çalıştı: Im kullanarak Xcode İşte 6.

Ben Beni verir bugüne kadar

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

çalıştı budur

func capitalizedStringWithLocale(locale:0) -> String 

Ama nasıl çalıştığını anlayamıyorum. Herhangi bir fikrin var mı?

cevap

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." 

aksi takdirde dizenin sonuna ötesine endeksi ilerletmek için çalışan bir çalışma zamanı hatası alırsınız gibi, başlamadan önce en az bir karakter sizin cümlede var emin olmak isteyebilirsiniz.

8

Swift 2'de, sen Swift 3'te String(text.characters.first!).capitalizedString + String(text.characters.dropFirst())

+0

Ayrıca, gerçekten sadece ilk harf "John" ya da "Doe" değil "John" ve "DOE" gibi dize harfle, aşağıdakileri yapabilirsiniz .first!) capitalizedString + Dize (text.characters.dropFirst()). – KingChintz

3

başka olasılık yapabilirsiniz -
Uyarılar Swift 3 yukarıdan Swift 4 için

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

Edit

Kodunuzu

'substring (to :)' kullanımdan kaldırıldı: Lütfen "d" dilini kullanarak dizgisini kullanın operatöre kadar aralık aralığı.
'substring (' 'den' kullanımdan kaldırıldı: Lütfen 'kısmi aralıklı' işleçle birlikte dize dilimleme alt dizesini kullanın.

Swift 4 çözümü - İşte

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

Swift 4'te bunu nasıl olduğu;

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

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

     return result 
    } 
} 

Orijinal String mutasyona olmaz: Her ihtimale karşı ve herkes yardımcı olur.

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
biri için

veya dize her kelime, sen String'in .capitalized özelliğini kullanabilirsiniz. `Dize (text.characters: İsterseniz

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

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