Come stampare le virgolette doppie all'interno di ""?


Risposte:


221

Con una barra rovesciata prima delle virgolette doppie che vuoi inserire nella stringa:

let sentence = "They said \"It's okay\", didn't they?"

Adesso sentenceè:

Hanno detto "Va tutto bene", no?

Si chiama "sfuggire" a un carattere: stai usando il suo valore letterale, non verrà interpretato.


Con Swift 4 puoi in alternativa scegliere di utilizzare il """delimitatore per il testo letterale in cui non è necessario sfuggire:

let sentence = """
They said "It's okay", didn't they?
Yes, "okay" is what they said.
"""

Questo da:

Hanno detto "Va tutto bene", no?
Sì, "va bene" è quello che hanno detto.


Con Swift 5 puoi utilizzare delimitatori avanzati:

I valori letterali stringa possono ora essere espressi utilizzando delimitatori avanzati . Una stringa letterale con uno o più segni numerici (#) prima delle virgolette di apertura considera le barre rovesciate e le virgolette doppie come letterali a meno che non siano seguite dallo stesso numero di segni numerici. Utilizzare delimitatori avanzati per evitare ingombri di stringhe letterali che contengono molte virgolette doppie o barre rovesciate con caratteri di escape extra.

La tua stringa ora può essere rappresentata come:

let sentence = #"They said "It's okay", didn't they?"#

E se vuoi aggiungere una variabile alla tua stringa dovresti aggiungere anche #dopo la barra rovesciata:

let sentence = #"My "homepage" is \#(url)"#

24

Per completezza, da documenti Apple :

I valori letterali stringa possono includere i seguenti caratteri speciali:

  • I caratteri speciali di escape \ 0 (carattere nullo), \ (barra rovesciata), \ t (tabulazione orizzontale), \ n (avanzamento riga), \ r (ritorno a capo), \ "(virgolette doppie) e \ '(virgolette singole)
  • Uno scalare Unicode arbitrario, scritto come \ u {n}, dove n è un numero esadecimale da 1 a 8 cifre con un valore uguale a un punto di codice Unicode valido

il che significa che oltre a poter eseguire l'escape del carattere con la barra rovesciata, puoi utilizzare il valore unicode. Le seguenti due affermazioni sono equivalenti:

let myString = "I love \"unnecessary\" quotation marks"
let myString = "I love \u{22}unnecessary\u{22} quotation marks"

myString ora conterrebbe:

Amo le virgolette "inutili"


8

In base alle tue esigenze, puoi utilizzare uno dei 4 schemi seguenti per stampare uno Swift Stringche contenga virgolette doppie.


1. Utilizzo di virgolette doppie con escape

I valori letterali stringa possono includere caratteri speciali come \":

let string = "A string with \"double quotes\" in it."
print(string) //prints: A string with "double quotes" in it.

2. Utilizzo degli scalari Unicode

I valori letterali stringa possono includere un valore scalare Unicode scritto come \u{n}:

let string = "A string with \u{22}double quotes\u{22} in it."
print(string) //prints: A string with "double quotes" in it.

3. Utilizzo di stringhe letterali su più righe (richiede Swift 4)

Il linguaggio di programmazione Swift / stringhe e caratteri afferma:

Poiché i valori letterali stringa su più righe utilizzano tre virgolette doppie invece di uno solo, è possibile includere un segno di virgolette doppie ( ") all'interno di un valore letterale stringa su più righe senza eseguire l'escape.

let string = """
A string with "double quotes" in it.
"""
print(string) //prints: A string with "double quotes" in it.

4. Utilizzo di stringhe letterali non elaborate (richiede Swift 5)

Il linguaggio di programmazione Swift / stringhe e caratteri afferma:

È possibile inserire una stringa letterale all'interno di delimitatori estesi per includere caratteri speciali in una stringa senza richiamarne l'effetto. Metti la tua stringa tra virgolette ( ") e la circondi con segni numerici ( #). Ad esempio, la stampa della stringa letterale #"Line 1\nLine 2"#stampa la sequenza di escape di avanzamento riga ( \n) invece di stampare la stringa su due righe.

let string = #"A string with "double quotes" in it."#
print(string) //prints: A string with "double quotes" in it.
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.