Jak wydrukować podwójne cudzysłowy wewnątrz „”?

Odpowiedzi:

227

Z odwrotnym ukośnikiem przed podwójnym cudzysłowem, który chcesz wstawić do ciągu:

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

Teraz sentencejest:

Powiedzieli: „W porządku”, prawda?

Nazywa się to „ucieczką” znaku: używasz jego wartości literalnej, nie zostanie ona zinterpretowana.


Dzięki Swift 4 możesz alternatywnie użyć """separatora dla dosłownego tekstu, gdy nie ma potrzeby ucieczki:

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

To daje:

Powiedzieli: „W porządku”, prawda?
Tak, powiedzieli „w porządku”.


W Swift 5 możesz używać ulepszonych separatorów:

Literały ciągów można teraz wyrazić za pomocą rozszerzonych ograniczników . Literał łańcuchowy z co najmniej jednym znakiem liczbowym (#) przed cudzysłowem otwierającym traktuje ukośniki odwrotne i znaki podwójnego cudzysłowu jako literały, chyba że następuje po nich taka sama liczba znaków liczbowych. Użyj rozszerzonych separatorów, aby uniknąć zaśmiecania literałów ciągu, które zawierają wiele znaków podwójnego cudzysłowu lub ukośnika odwrotnego z dodatkowymi znakami ucieczki.

Twój ciąg może być teraz przedstawiony jako:

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

A jeśli chcesz dodać zmienną do swojego ciągu, powinieneś również dodać #po odwrotnym ukośniku:

let sentence = #"My "homepage" is \#(url)"#
Eric Aya
źródło
24

Aby uzyskać kompletność, z dokumentów Apple :

Literały ciągów mogą zawierać następujące znaki specjalne:

  • Znaki specjalne ze zmianą znaczenia \ 0 (znak null), \ (ukośnik lewy), \ t (tabulator poziomy), \ n (znak nowego wiersza), \ r (powrót karetki), \ "(cudzysłów podwójny) i \ '(cudzysłów pojedynczy)
  • Dowolny skalar Unicode, zapisywany jako \ u {n}, gdzie n jest liczbą szesnastkową od 1 do 8 cyfr o wartości równej poprawnemu punktowi kodowemu Unicode

co oznacza, że ​​oprócz możliwości ucieczki znaku za pomocą odwrotnego ukośnika, możesz użyć wartości Unicode. Następujące dwa stwierdzenia są równoważne:

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

myString zawierałby teraz:

Uwielbiam „niepotrzebne” cudzysłowy

Daniel
źródło
9

W zależności od potrzeb możesz użyć jednego z 4 poniższych wzorców , aby wydrukować Swift Stringzawierający podwójne cudzysłowy.


1. Użycie podwójnych cudzysłowów ze zmianą znaczenia

Literały ciągów mogą zawierać znaki specjalne, takie jak \" :

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

2. Korzystanie ze skalarów Unicode

Literały ciągów mogą zawierać wartość skalarną Unicode zapisaną jako \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. Używanie wielowierszowych literałów ciągów (wymaga języka Swift 4)

Plik Swift Programming Language / Strings and Characters stwierdza:

Ponieważ wielowierszowe literały ciągów używają trzech podwójnych cudzysłowów zamiast tylko jednego, można umieścić podwójny cudzysłów ( ") wewnątrz wielowierszowego literału ciągu bez zmiany znaczenia.

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

4. Korzystanie z nieprzetworzonych literałów ciągu (wymaga języka Swift 5)

Swift język programowania / Strings i znaków stwierdza:

Możesz umieścić literał ciągu w rozszerzonych ogranicznikach, aby dołączyć znaki specjalne do ciągu bez wywoływania ich efektu. Umieszczasz ciąg w cudzysłowie ( ") i otaczasz go znakami liczbowymi ( #). Na przykład wypisanie literału ciągu #"Line 1\nLine 2"#drukuje sekwencję ucieczki przed przejściem do wiersza ( \n) zamiast wypisywać ciąg w dwóch wierszach.

let string = #"A string with "double quotes" in it."#
print(string) //prints: A string with "double quotes" in it.
Imanou Petit
źródło