Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Raw Strings #41

Closed
Taehyeon-Kim opened this issue Jul 12, 2022 · 1 comment
Closed

Raw Strings #41

Taehyeon-Kim opened this issue Jul 12, 2022 · 1 comment

Comments

@Taehyeon-Kim
Copy link
Owner

Taehyeon-Kim commented Jul 12, 2022

Swift5부터 지원하는 문자열 표현 방법에 대한 개선점을 같이 알아봅시다.

SE-0200 Enhancing String Literals Delimiters to Support Raw Text

많은 다른 언어와 마찬가지로 Swift는 이스케이프 문자( \ )를 사용해서 문자열 리터럴 내에서 후속 문자의 특별한 해석을 만듭니다. 이스케이프 문자 시퀀스는 문자열 구분 기호(큰 따옴표), 이스케이프 문자(백 슬래시), 문자열 보간 등에 대한 문자 집합을 나타냅니다.

사실 이스케이프 문자를 사용하는 것은 너무 귀찮은 일이고, 문자열 리터럴 안에 많은 이스케이프 시퀀스가 포함되어 있으면 읽기 어렵습니다. 이를 Apple에서 알아주었는지 Swift 5부터는 조금 더 단순하고 깔끔하게 문자열 리터럴 구문을 작성할 수 있게 되었습니다.

사용법: Hash(#) 구분 기호 사용

해시(#) 구분 기호를 사용해서 단순하고 깔끔한 구문을 작성할 수 있습니다.

1. 기본 사용법

let rawStrings = "Hello, \"Raw Strings\"."
let rawStrings = #"Hello, "Raw Strings"."#
Output)
Hello, "Raw Strings".
Hello, "Raw Strings".

2. 이스케이프 시퀀스의 역할을 유지하고 싶을 때

Raw String에서는 모든 문자와 이스케이프 시퀀스가 그대로 출력이 됩니다. 줄바꿈도 하고 싶고, 그냥 백 슬래시도 쓰고 싶은데 어떡하죠? 두 번째 코드처럼 작성하면 문제를 해결할 수 있습니다.

let escapeStrings = #"줄을 바꾸고 싶어요. \n\n 여기서 부터요."#
// output)
// 줄을 바꾸고 싶어요. \n\n 여기서 부터요.
let escapeStrings = #"줄을 바꾸고 싶어요. \#n\#n여기서 부터요."#
// output)
// 줄을 바꾸고 싶어요. 
//
// 여기서 부터요.

3. 변수와 함께 사용하고 싶을 때 (- 문자열 보간법)

해시 기호의 개수는 사용하는 부분에서 동일하게 맞춰주기만 한다면 문제가 없습니다. 특별한 이유가 없다면 1개만 쓰는 것이 낫겠죠?

var onlineService = "WhaleOn"
var finalNotice = ##"온라인 라이브 수업은 \##(onlineService)으로 진행합니다."##
// output)
// 온라인 라이브 수업은 WhaleOn으로 진행합니다.

4. 여러 줄에서 사용하고 싶을 때

시작과 끝에 해시 기호를 붙여주면 됩니다.

let number: Int = 2
let multiline = #"""
This is
SeSAC \#(number).
"""#

5. 정규식 사용 시

How to use raw strings in Swift 5 아티클을 읽어보면 정규식을 사용할 때에도 Raw String이 유용하게 사용될 수 있다는 것을 확인할 수 있습니다. 기존에 정규식을 작성해 본 사람이라면 백 슬래시()가 많이 사용되는 것을 경험해보셨을 것입니다. 문자열 리터럴 내에서 백 슬래시를 올바르게 사용하려면 또 하나의 백 슬래시를 붙여줘야 했었죠. 이러한 귀찮음, 복잡함을 해시(#) 기호를 붙임으로서 해결할 수 있습니다.

let regex = try NSRegularExpression(pattern: "\\\\\\([^)]+\\)")
let regex = try NSRegularExpression(pattern: #"\\\([^)]+\)"#)

기존 정규식의 사용되던 백 슬래시의 수를 절반으로 줄일 수 있고, 또한 가져온 정규식 표현을 그대로 사용할 수 있다는 장점이 있습니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant