Próbuję stworzyć system autokorekty, a gdy użytkownik wpisze słowo z wielką literą, autokorekta nie działa. Aby to naprawić, zrobiłem kopię napisanego łańcucha, zastosowałem .lowercaseString, a następnie porównałem je. Jeśli ciąg znaków jest rzeczywiście źle wpisany, powinien poprawić słowo. Jednak słowo, które zastępuje wpisane słowo, jest pisane małymi literami. Więc muszę zastosować .uppercaseString tylko do pierwszej litery. Początkowo myślałem, że mogę użyć
nameOfString[0]
ale to najwyraźniej nie działa. Jak uzyskać pierwszą literę ciągu na wielkie litery, a następnie móc wydrukować cały ciąg z wielką literą pierwszej litery?
Dzięki za wszelką pomoc!
ios
swift
string
ios8-extension
Jakiś facet
źródło
źródło
.capitalizedString
nie działa już w Xcode 7 Beta 4. Ciągi zmieniły się nieco w Swift 2.0.Foundation
owczy uśmiech.uppercaseString
do tego.capitalized
teraz. Zauważ teżcapitalizedStringWith(_ locale:)
Swift 5.1 lub nowszy
Szybki 5
źródło
UITextField
obserwatoremUITextFieldTextDidChangeNotification
.za „Hello World”
lub „HELLO WORLD”
źródło
Swift 4.0
lub
Jednak litera każdego słowa jest wielką literą
Dokumentacja Apple:
źródło
W przypadku Swift 5:
źródło
isEmpty
i zainicjować ciąg, aby zastąpić oba. Możesz po prostu rozpakować pierwszą postać, a w przypadku jej niepowodzenia zwróć zero. Można to uprościć jakovar firstCharacterUpperCase: String? { guard let first = first else { return nil } return lowercased().replacingCharacters(in: startIndex...startIndex, with: first.uppercased()) }
Dla pierwszego znaku w użyciu słowa
.capitalized
w trybie szybkim i do użycia całego słowa.uppercased()
źródło
Swift 2.0 (pojedyncza linia):
źródło
.localizedLowercaseString
na końcu, aby działało z ciągami takimi jak: aNYsTring.String(nameOfString.characters.prefix(1)).uppercaseString + String(nameOfString.characters.dropFirst()).localizedLowercaseString
Swift 3 (xcode 8.3.3)
Wielkie litery wszystkich pierwszych znaków ciągu
Wielkie litery wszystkich znaków
Wielkie litery tylko pierwszy znak ciągu
źródło
W szybkim 5
https://www.hackingwithswift.com/example-code/strings/how-to-capitalize-the-first-letter-of-a-string
użyj ze swoim ciągiem
źródło
Dostaję pierwszą postać powieloną z rozwiązaniem Kirsteinsa. Spowoduje to wielkie litery pierwszej postaci, bez podwójnego:
Nie wiem, czy jest bardziej czy mniej wydajny, po prostu wiem, że daje mi pożądany efekt.
źródło
countElements
jest po prostucount
.Z Swift 3 możesz łatwo korzystać
textField.autocapitalizationType = UITextAutocapitalizationType.sentences
źródło
Oto wersja dla Swift 5, która korzysta z interfejsu API właściwości skalarnych Unicode, aby ratować, jeśli pierwsza litera jest już wielka lub nie ma pojęcia wielkości liter:
źródło
return first.uppercased() + dropFirst()
lub jeden liniowiec(first?.uppercased() ?? "") + dropFirst()
Wpisz pierwszy znak w ciągu
źródło
W Swift 3.0 (jest to trochę szybsze i bezpieczniejsze niż zaakceptowana odpowiedź):
nameOfString.capitalized nie będzie działać , będzie używać wielkich liter każdego słowa w zdaniu
źródło
Kredyty dla Leonardo Savio Dabus:
Wyobrażam sobie, że większość przypadków użycia polega na uzyskaniu odpowiedniej obudowy:
źródło
Moje rozwiązanie:
źródło
Uwzględniając powyższe odpowiedzi, napisałem małe rozszerzenie, które zawiera pierwszą literę każdego słowa (ponieważ właśnie tego szukałem i pomyślałem, że ktoś inny może go użyć).
Pokornie składam:
źródło
Szybki 4
źródło
Oto jak to zrobiłem małymi krokami, jest podobny do @Kirsteins.
źródło
Działa również po prostu przekaż swój ciąg i odzyskaj wielką literę.
źródło
Aktualizacja Swift 3
replaceRange
Func jest terazreplaceSubrange
źródło
Jestem częściowo zwolennikiem tej wersji, która jest oczyszczoną wersją z innej odpowiedzi:
Stara się być bardziej efektywny, oceniając tylko samopodobne postacie, a następnie używa spójnych formularzy do tworzenia podłańcuchów.
źródło
Swift 4 (Xcode 9.1)
źródło
capitalized
właśnie w tym celuJeśli chcesz wielkie litery każdego słowa ciągu, możesz użyć tego rozszerzenia
Swift 4 Xcode 9.2
Używany
źródło
.capitalized
Jeśli ciąg zawiera wszystkie wielkie litery, zadziała poniższa metoda
To rozszerzenie ci pomoże
źródło
.capitalized
.capitalized
zwróci (To chłopiec) i ta metoda zwróci (To chłopiec) Oba są różne. (Proszę zrobić + ve Głosuj lub Usuń negatywne)return first.uppercased() + dropFirst()
lub powrót jednego liniowca(first?.uppercased() ?? "") + dropFirst()
Dodaj ten wiersz w metodzie viewDidLoad ().
źródło
źródło
W przypadku swift 5 możesz po prostu zrobić tak:
Przykład: „abc” -> „Abc”
źródło