avviso: 'caratteri' è obsoleto: utilizzare direttamente String o Sottostringa


162

caratteri - una proprietà di istanza di String, è obsoleta con Xcode 9.1

È stato molto utile ottenere una sottostringa da String usando la charactersproprietà ma ora è stata deprecata e Xcode suggerisce di usarla substring. Ho provato a controllare le domande SO e le esercitazioni / linee guida per sviluppatori Apple per lo stesso. Ma non è stato possibile visualizzare alcuna soluzione / alternativa come suggerito.

Ecco un messaggio di avviso:

'caratteri' è obsoleto: utilizzare String o Sottostringa

inserisci qui la descrizione dell'immagine

Ho così tante operazioni su stringa eseguite / gestite usando la proprietà characters.

Qualcuno ha qualche idea / informazione su questo aggiornamento?


5
Ecco un articolo interessante sulle Stringmodifiche da Swift 3 a 4 e leggi anche SE0163
vadian

5
prova ad usare countinvece.
Holex,

1
Se stavi utilizzando string.characters.forEachla nuova API èstring.forEach { char in process(char) }
Efren il

Risposte:


270

Swift 4 ha introdotto modifiche sull'API delle stringhe.
Puoi semplicemente usare !stringValue.isEmptyinvece distringValue.characters.count > 0

per ulteriori informazioni si ottiene il campione da qui

per es

let edit = "Summary"
edit.count   // 7

Grazie per la risposta. Ma posso avere riferimenti dettagliati della sottostringa. Questo è solo un esempio, ho tante altre operazioni sui personaggi
Krunal,

1
Si prega di controllare le informazioni dettagliate da qui. developer.apple.com/library/content/documentation/Swift/…
songxunzhao

let greeting = "Ciao, mondo!" let index = greeting.index (of: ",") ?? greeting.endIndex let iniziale = saluto [.. <indice]
songxunzhao,

1
Riferimento online per sottostringa .
Dennis Vennink,

32
Non usare mai count> 0 per verificare se una raccolta è vuota. Esiste una proprietà su Collection chiamata isEmpty proprio per questo. Dai documenti Quando è necessario verificare se la raccolta è vuota, utilizzare la proprietà isEmpty invece di verificare che la proprietà count sia uguale a zero. Per raccolte che non sono conformi a RandomAccessCollection, l'accesso alla proprietà count scorre attraverso gli elementi della raccolta.
Leo Dabus,

82

Swift 4 vs Swift 3 esempi:

let myString = "test"

for char in myString.characters {print(char) } // Swift 3
for char in myString { print(char) } // Swift 4

let length = myString.characters.count // Swift 3
let length = myString.count // Swift 4

2
Questa dovrebbe essere la risposta accettata. La domanda riguarda la sostituzione di string.characters.count, non la sostituzione per il confronto con zero; questo è menzionato solo nello screenshot.
Timothy Kanski,

9

Uno dei casi più comuni per manipolare le stringhe è con le risposte JSON. In questo esempio ho creato un'estensione nella mia app watch per eliminare gli ultimi (n) caratteri di un oggetto JSON Bitcoin.

Swift 3:

func dropLast(_ n: Int = 0) -> String {
    return String(characters.dropLast(n))

Messaggio di errore Xcode 9.1:

'caratteri' è obsoleto: utilizzare direttamente String o Sottostringa

Xcode ci sta dicendo di utilizzare la variabile stringa o il metodo direttamente .

Swift 4:

func dropLast(_ n: Int = 0) -> String {
    return String(dropLast(n))
    }

Estensione completa:

extension String {
    func dropLast(_ n: Int = 0) -> String {
        return String(dropLast(n))
    }

    var dropLast: String {
        return dropLast()
    }
}

Chiamata:

print("rate:\(response.USDRate)")
let literalMarketPrice = response.USDRate.dropLast(2)
print("literal market price: \(literalMarketPrice)")

Console:

//rate:7,101.0888 //JSON float
//literal market price: 7,101.08 // JSON string literal

Esempi aggiuntivi:

  • print("Spell has \(invisibleSpellName.count) characters.")
  • return String(dropLast(n))
  • return String(removeLast(n))

Documentazione:

Spesso si stia utilizzando metodi comuni come dropLast()o removeLast()o countecco la documentazione di Apple esplicita per ogni metodo.

droplast ()

removelast ()

contare i personaggi



2

Usa questo charactersperché ha Stringsmesso di essere una raccolta in Swift 2.0. Tuttavia, questo è ancora un codice valido in Swift 4 ma non è più necessario ora che Stringè di Collectionnuovo un .

Ad esempio, Swift 4 Stringora ha una proprietà di conteggio diretto che fornisce il conteggio dei caratteri:

// Swift 4
let spString = "Stack"
spString.count           // 5

Esempi per String e SubString.

Corda

Swift 4 Stringora ottiene direttamente Element che dà il primo carattere di String:(string.characters.first)

let spString = "Stack"
let firstElement = spString.first   //S

sottoStringa

Utilizzando SubString ottieni il primo carattere.

let spstring = "Welcome"
let indexStartOfText = spstring.index(spstring.startIndex, offsetBy: 1)
let sub = spstring.substring(to: indexStartOfText)
print(sub) //W

Voglio ottenere il primo carattere della stringa, quindi voglio sapere in che modo dovrei usare let firstElement = spString.first o Substring?
Pulkit,

1
@Pulkit Meglio usare .firstperché se la stringa è ""vuota. restituirà solo zero ma substringprodurrà un errore.
Pranavan,

come convertire questa riga di codice in swift 4 'AuthorImageText = String (val.characters [(AuthorName.startIndex)]). capitalized'
Pulkit

@Pulkit basta rimuovere .charactersabbastanza
Pranavan Sp

0

Puoi anche usare questo codice per raggruppare i dizionari senza usare {$ 0.characters.first! }.

let cities = ["Shanghai": 24_256_800, "Karachi": 23_500_000, "Beijing": 21_516_000, "Seoul": 9_995_000]
let groupedCities = Dictionary(grouping: cities.keys) { $0.first! }
print(groupedCities)

0

Rimuovi i caratteri Ad esempio:

stringValue.characters.count a stringValue.count

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.