[ios] Swift는 문자열의 첫 글자에만 .uppercaseString을 적용합니다

자동 고침 시스템을 만들려고하는데 사용자가 대문자로 단어를 입력하면 자동 고침이 작동하지 않습니다. 이 문제를 해결하기 위해 문자열 형식의 사본을 만들어 .lowercaseString을 적용한 다음 비교했습니다. 문자열이 실제로 잘못 입력 된 경우 단어를 수정해야합니다. 그러나 입력 된 단어를 대체하는 단어는 모두 소문자입니다. 따라서 첫 번째 문자에만 .uppercaseString을 적용해야합니다. 나는 원래 내가 사용할 수 있다고 생각

nameOfString[0]

그러나 이것은 분명히 작동하지 않습니다. 문자열의 첫 글자를 대문자로 가져온 다음 첫 글자를 대문자로 전체 문자열을 인쇄하려면 어떻게해야합니까?

도움을 주셔서 감사합니다!



답변

API 지침과 일치하는 변형 및 비 돌연변이 버전 포함

스위프트 3 :

extension String {
    func capitalizingFirstLetter() -> String {
        let first = String(characters.prefix(1)).capitalized
        let other = String(characters.dropFirst())
        return first + other
    }

    mutating func capitalizeFirstLetter() {
        self = self.capitalizingFirstLetter()
    }
}

스위프트 4 :

extension String {
    func capitalizingFirstLetter() -> String {
      return prefix(1).uppercased() + self.lowercased().dropFirst()
    }

    mutating func capitalizeFirstLetter() {
      self = self.capitalizingFirstLetter()
    }
}


답변

스위프트 5.1 이상

extension StringProtocol {
    var firstUppercased: String { prefix(1).uppercased() + dropFirst() }
    var firstCapitalized: String { prefix(1).capitalized + dropFirst() }
}

스위프트 5

extension StringProtocol {
    var firstUppercased: String { return prefix(1).uppercased() + dropFirst() }
    var firstCapitalized: String { return prefix(1).capitalized + dropFirst() }
}

"Swift".first  // "S"
"Swift".last   // "t"
"hello world!!!".firstUppercased  // "Hello world!!!"

"DŽ".firstCapitalized   // "Dž"
"Dž".firstCapitalized   // "Dž"
"dž".firstCapitalized   // "Dž"


답변

스위프트 3.0

“Hello World”

nameOfString.capitalized

또는 “HELLO WORLD”

nameOfString.uppercased


답변

스위프트 4.0

string.capitalized(with: nil)

또는

string.capitalized

그러나 이것은 모든 단어의 첫 글자를 대문자로

Apple의 설명서 :

대문자 문자열은 각 단어의 첫 번째 문자가 해당하는 대문자 값으로 변경되고 나머지 모든 문자는 해당하는 소문자 값으로 설정된 문자열입니다. “단어”는 공백, 탭 또는 줄 종결 자로 구분되는 일련의 문자입니다. 일반적인 구두점 구분 구두점은 고려되지 않으므로이 속성은 일반적으로 여러 단어로 된 문자열에 대해 원하는 결과를 생성하지 않을 수 있습니다. 추가 정보는 getLineStart (_ : end : contentsEnd : for 🙂 메소드를 참조하십시오.


답변

extension String {
    func firstCharacterUpperCase() -> String? {
        let lowercaseString = self.lowercaseString

        return lowercaseString.stringByReplacingCharactersInRange(lowercaseString.startIndex...lowercaseString.startIndex, withString: String(lowercaseString[lowercaseString.startIndex]).uppercaseString)
    }
}

let x = "heLLo"
let m = x.firstCharacterUpperCase()

스위프트 5 :

extension String {
    func firstCharacterUpperCase() -> String? {
        guard !isEmpty else { return nil }
        let lowerCasedString = self.lowercased()
        return lowerCasedString.replacingCharacters(in: lowerCasedString.startIndex...lowerCasedString.startIndex, with: String(lowerCasedString[lowerCasedString.startIndex]).uppercased())
    }
}


답변

.capitalized신속한 단어 사용 및 전체 단어 사용을위한 첫 번째 문자.uppercased()


답변

스위프트 2.0 (한 줄) :

String(nameOfString.characters.prefix(1)).uppercaseString + String(nameOfString.characters.dropFirst())