Jak w Objective-C na iOS usunąć ostatni znak ciągu za pomocą akcji przycisku?
151
Jak w Objective-C na iOS usunąć ostatni znak ciągu za pomocą akcji przycisku?
W swojej klasie kontrolera utwórz metodę akcji, do której podłączysz przycisk w Interface Builder. Wewnątrz tej metody możesz przyciąć swój ciąg w następujący sposób:
if ([string length] > 0) {
string = [string substringToIndex:[string length] - 1];
} else {
//no characters to delete... attempting to do so will result in a crash
}
Jeśli chcesz zrobić to w fantazyjny sposób w jednej linii kodu, możesz napisać to jako:
string = [string substringToIndex:string.length-(string.length>0)];
* Wyjaśnienie fantazyjnego jednowierszowego fragmentu kodu:
Jeśli istnieje znak do usunięcia (tj. Długość ciągu jest większa niż 0)
(string.length>0)
zwraca, w 1
ten sposób kod powraca:
string = [string substringToIndex:string.length-1];
Jeśli NIE ma znaku do usunięcia (tj. Długość ciąg NIE jest większy niż 0)
(string.length>0)
zwraca, 0
więc kod zwraca:
string = [string substringToIndex:string.length-0];
co zapobiega awariom.
string != nil && [string length] > 0
. Prawdopodobnie zmienna łańcuchowa Donala została zwolniona.Jeśli jest to NSMutableString (co polecam, ponieważ zmieniasz go dynamicznie), możesz użyć:
źródło
Podane tutaj rozwiązania w rzeczywistości nie uwzględniają wielobajtowych znaków Unicode („znaków złożonych”) i mogą skutkować nieprawidłowymi ciągami znaków Unicode.
W rzeczywistości plik nagłówkowy iOS zawierający deklarację
substringToIndex
zawiera następujący komentarz:Zobacz, jak
rangeOfComposedCharacterSequenceAtIndex:
poprawnie usunąć ostatni znak.źródło
Dokumentacja jest twoim przyjacielem,
NSString
obsługuje wywołanie,substringWithRange
które może skrócić ciąg, który masz, zwrócić skrócony String. Nie można zmodyfikować jej wystąpieniaNSString
, jest niezmienne. Jeśli masz,NSMutableString
to ma wywoływaną metodę,deleteCharactersInRange
która może modyfikować ciąg w miejscuźródło
substringWithRange:
zwraca plikNSString*
. Zwróć uwagę na wskaźnik.