How to print double quotes inside ""?
SwiftStringEscapingSwift Problem Overview
Can someone please tell me how can I print something in following way "with" double quotes.
"Double Quotes"
Swift Solutions
Solution 1 - Swift
With a backslash before the double quote you want to insert in the String:
let sentence = "They said \"It's okay\", didn't they?"
Now sentence
is:
> They said "It's okay", didn't they?
It's called "escaping" a character: you're using its literal value, it will not be interpreted.
With Swift 4 you can alternatively choose to use the """
delimiter for literal text where there's no need to escape:
let sentence = """
They said "It's okay", didn't they?
Yes, "okay" is what they said.
"""
This gives:
>They said "It's okay", didn't they?
>Yes, "okay" is what they said.
With Swift 5 you can use enhanced delimiters:
>String literals can now be expressed using enhanced delimiters. A string literal with one or more number signs (#) before the opening quote treats backslashes and double-quote characters as literal unless they’re followed by the same number of number signs. Use enhanced delimiters to avoid cluttering string literals that contain many double-quote or backslash characters with extra escapes.
Your string now can be represented as:
let sentence = #"They said "It's okay", didn't they?"#
And if you want add variable to your string you should also add #
after backslash:
let sentence = #"My "homepage" is \#(url)"#
Solution 2 - Swift
For completeness, from Apple docs:
> String literals can include the following special characters: > > * The escaped special characters \0 (null character), \ (backslash), \t > (horizontal tab), \n (line feed), \r (carriage return), " (double > quote) and ' (single quote) > * An arbitrary Unicode scalar, written as > \u{n}, where n is a 1–8 digit hexadecimal number with a value equal to > a valid Unicode code point
which means that apart from being able to escape the character with backslash, you can use the unicode value. Following two statements are equivalent:
let myString = "I love \"unnecessary\" quotation marks"
let myString = "I love \u{22}unnecessary\u{22} quotation marks"
myString
would now contain:
> I love "unnecessary" quotation marks
Solution 3 - Swift
According to your needs, you may use one of the 4 following patterns in order to print a Swift String
that contains double quotes in it.
1. Using escaped double quotation marks
String literals can include special characters such as \"
:
let string = "A string with \"double quotes\" in it."
print(string) //prints: A string with "double quotes" in it.
2. Using Unicode scalars
String literals can include Unicode scalar value written as \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. Using multiline string literals (requires Swift 4)
The The Swift Programming Language / Strings and Characters states:
>Because multiline string literals use three double quotation marks instead of just one, you can include a double quotation mark ("
) inside of a multiline string literal without escaping it.
let string = """
A string with "double quotes" in it.
"""
print(string) //prints: A string with "double quotes" in it.
4. Using raw string literals (requires Swift 5)
The The Swift Programming Language / Strings and Characters states:
>You can place a string literal within extended delimiters to include special characters in a string without invoking their effect. You place your string within quotation marks ("
) and surround that with number signs (#
). For example, printing the string literal #"Line 1\nLine 2"#
prints the line feed escape sequence (\n
) rather than printing the string across two lines.
let string = #"A string with "double quotes" in it."#
print(string) //prints: A string with "double quotes" in it.