No Objective-C para iOS, como removeria o último caractere de uma sequência usando uma ação de botão?
No Objective-C para iOS, como removeria o último caractere de uma sequência usando uma ação de botão?
Na sua classe de controlador, crie um método de ação para o qual você conectará o botão no Interface Builder. Dentro desse método, você pode aparar sua string assim:
if ([string length] > 0) {
string = [string substringToIndex:[string length] - 1];
} else {
//no characters to delete... attempting to do so will result in a crash
}
Se você quiser uma maneira elegante de fazer isso em apenas uma linha de código, escreva-a como:
string = [string substringToIndex:string.length-(string.length>0)];
* Explicação do trecho de código de uma linha sofisticado:
Se houver um caractere a ser excluído (ou seja, o comprimento da string for maior que 0)
(string.length>0)
retornará 1
, fazendo com que o código retorne:
string = [string substringToIndex:string.length-1];
Se NÃO houver um caractere a ser excluído (ou seja, o comprimento do string NÃO é maior que 0)
(string.length>0)
retorna 0
, fazendo com que o código retorne: O
string = [string substringToIndex:string.length-0];
que evita falhas.
string != nil && [string length] > 0
. Provavelmente, a variável de string de Donal está sendo liberada em excesso.Se for um NSMutableString (o que eu recomendaria, pois você o altera dinamicamente), você pode usar:
fonte
As soluções fornecidas aqui, na verdade, não levam em consideração caracteres Unicode de vários bytes ("caracteres compostos") e podem resultar em seqüências de caracteres Unicode inválidas.
De fato, o arquivo de cabeçalho do iOS que contém a declaração de
substringToIndex
contém o seguinte comentário:Veja como usar
rangeOfComposedCharacterSequenceAtIndex:
para excluir o último caractere corretamente.fonte
A documentação é sua amiga,
NSString
suporta uma chamadasubstringWithRange
que pode encurtar a string que você tem para retornar a String encurtada. Você não pode modificar uma instânciaNSString
dela é imutável. Se você tem umNSMutableString
é chamado um métododeleteCharactersInRange
que pode modificar a sequência no lugarfonte
substringWithRange:
retorna aNSString*
. Tome nota do ponteiro.