Atualização para Swift 4
No Swift 4, Stringestá em conformidade Collectionnovamente, portanto, é possível usar dropFirste dropLastaparar o início e o fim das strings. O resultado é do tipo Substring, então você precisa passar isso para o Stringconstrutor 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 Intpara 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 dropFirste dropLastantes 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 , dropFirste 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 substringFromIndexe 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 dropFirste dropLastantes 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 chopPrefixassim:
"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))
}
}
advancecoisa 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.