Aggiornamento per Swift 4
In Swift 4, Stringè di Collectionnuovo conforme a , quindi è possibile utilizzare dropFirste dropLasttagliare l'inizio e la fine delle stringhe. Il risultato è di tipo Substring, quindi devi passarlo al Stringcostruttore per ottenere un String:
let str = "hello"
let result1 = String(str.dropFirst()) // "ello"
let result2 = String(str.dropLast()) // "hell"
dropFirst()e dropLast()prendi anche un Intper specificare il numero di caratteri da eliminare:
let result3 = String(str.dropLast(3)) // "he"
let result4 = String(str.dropFirst(4)) // "o"
Se specifichi più caratteri da eliminare rispetto a quelli presenti nella stringa, il risultato sarà la stringa vuota ( "").
let result5 = String(str.dropFirst(10)) // ""
Aggiornamento per Swift 3
Se vuoi solo rimuovere il primo carattere e vuoi cambiare la stringa originale in posizione, vedi la risposta di @ MickMacCallum. Se vuoi creare una nuova stringa nel processo, usa substring(from:). Con un'estensione aString , puoi nascondere la bruttezza substring(from:)e substring(to:)creare utili aggiunte per tagliare l'inizio e la fine di un 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"
Come dropFirste dropLastprima di loro, queste funzioni andranno in crash se non ci sono abbastanza lettere disponibili nella stringa. Spetta al chiamante usarli correttamente. Questa è una decisione progettuale valida. Si potrebbe scriverli per restituire un optional che poi dovrebbe essere scartato dal chiamante.
Swift 2.x
Ahimè a Swift 2 , dropFirste dropLast(la migliore soluzione precedente) non sono così conveniente come prima. Con un'estensione a String, puoi nascondere la bruttezza disubstringFromIndex 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"
Piace dropFirste dropLastprima di loro, queste funzioni andranno in crash se non ci sono abbastanza lettere disponibili nella stringa. Spetta al chiamante usarli correttamente. Questa è una decisione progettuale valida. Si potrebbe scriverli per restituire un optional che poi dovrebbe essere scartato dal chiamante.
In Swift 1.2 , dovrai chiamarechopPrefix questo modo:
"hello".chopPrefix(count: 3) // "lo"
oppure puoi aggiungere un trattino basso _alle definizioni di funzione per sopprimere il nome del parametro:
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))
}
}
advancecastingdisplay.text!su NSString. Non sto dicendo che sia una buona soluzione, sto solo correggendo un possibile malinteso. Con NSString, puoi indicizzarlo con Int. - E il motivo per cui non puoi indicizzare con Int non è a causa di Unicode; è perché un carattere può essere costituito da più punti di codice composti.