Atualização para Swift 4
No Swift 4, String
está em conformidade Collection
novamente, portanto, é possível usar dropFirst
e dropLast
aparar o início e o fim das strings. O resultado é do tipo Substring
, então você precisa passar isso para o String
construtor para recuperar um String
:
let str = "hello"
let result1 = String(str.dropFirst()) // "ello"
let result2 = String(str.dropLast()) // "hell"
dropFirst()
e dropLast()
também use um Int
para especificar o número de caracteres a serem descartados:
let result3 = String(str.dropLast(3)) // "he"
let result4 = String(str.dropFirst(4)) // "o"
Se você especificar mais caracteres a serem descartados do que na cadeia, o resultado será a cadeia vazia ( ""
).
let result5 = String(str.dropFirst(10)) // ""
Atualização para Swift 3
Se você deseja apenas remover o primeiro caractere e alterar a sequência original, consulte a resposta de @ MickMacCallum. Se você deseja criar uma nova string no processo, use substring(from:)
. Com uma extensão para String
, você pode ocultar a feiura substring(from:)
e substring(to:)
criar adições úteis para aparar o início e o fim de um String
:
extension String {
func chopPrefix(_ count: Int = 1) -> String {
return substring(from: index(startIndex, offsetBy: count))
}
func chopSuffix(_ count: Int = 1) -> String {
return substring(to: index(endIndex, offsetBy: -count))
}
}
"hello".chopPrefix() // "ello"
"hello".chopPrefix(3) // "lo"
"hello".chopSuffix() // "hell"
"hello".chopSuffix(3) // "he"
Como dropFirst
e dropLast
antes delas, essas funções falharão se não houver letras suficientes disponíveis na String. O ônus está no chamador para usá-los corretamente. Esta é uma decisão de design válida. Alguém poderia escrevê-los para retornar um opcional que, em seguida, teria que ser desembrulhado pelo chamador.
Swift 2.x
Infelizmente no Swift 2 , dropFirst
e dropLast
(a melhor solução anterior) não são tão convenientes quanto antes. Com uma extensão para String
, você pode ocultar a feiura substringFromIndex
e substringToIndex
:
extension String {
func chopPrefix(count: Int = 1) -> String {
return self.substringFromIndex(advance(self.startIndex, count))
}
func chopSuffix(count: Int = 1) -> String {
return self.substringToIndex(advance(self.endIndex, -count))
}
}
"hello".chopPrefix() // "ello"
"hello".chopPrefix(3) // "lo"
"hello".chopSuffix() // "hell"
"hello".chopSuffix(3) // "he"
Como dropFirst
e dropLast
antes delas, essas funções falharão se não houver letras suficientes disponíveis na String. O ônus está no chamador para usá-los corretamente. Esta é uma decisão de design válida. Alguém poderia escrevê-los para retornar um opcional que, em seguida, teria que ser desembrulhado pelo chamador.
No Swift 1.2 , você precisará chamar chopPrefix
assim:
"hello".chopPrefix(count: 3) // "lo"
ou você pode adicionar um sublinhado _
às definições da função para suprimir o nome do parâmetro:
extension String {
func chopPrefix(_ count: Int = 1) -> String {
return self.substringFromIndex(advance(self.startIndex, count))
}
func chopSuffix(_ count: Int = 1) -> String {
return self.substringToIndex(advance(self.endIndex, -count))
}
}
advance
coisa todadisplay.text!
transmitindo para o NSString. Não estou dizendo que é uma boa solução - apenas corrigindo um possível equívoco. Com o NSString, você pode indexá-lo com o Int. - E a razão pela qual você não pode indexar com Int não é por causa do Unicode; é porque um personagem pode consistir em vários pontos de código compostos.