Swift | Raw Strings에 대하여(feat. 특수문자 처리반)
⎮ 문자열에서 사용되는 특수한 문자
Swift에서 문자열을 표현할 때 자주 사용하게 되는 기호는 " 와 \ 입니다
let greeting = "Hello Swift"
"를 양 옆에 붙여 String임을 명시하거나,
let greeting = "Hello\nSwift"
위와 같이 줄 바꿈을 할때에도 \ 를 사용할 수 있습니다
이 간단한 전제는 문제점을 가지고 있습니다
상황 1)
도서 관련 앱을 만들고 있는데, 다음과 같은 문구가 들어가야 합니다
철수가 말했습니다. "안녕 영희야"
이럴 땐 어떻게 해야할까요?
let str = "철수가 말했습니다. "안녕 영희야""
다음과 같이 작성할 수는 없습니다
그러면 어떻게 해야할까요?
문자 그대로 사용하고자 하는 " 앞에 \ 를 붙여 작성할 수는 있습니다
let str = "철수가 말했습니다. \"안녕 영희야\""
상황 2)
이번에는 \ 기호를 포함한 문자열을 만들어야 합니다.
힘들다면 당근을 흔들어주세요! \O\
let str = "힘들다면 당근을 흔들어주세요! \O\"
\는 escape 문자라서 오류가 납니다
아까 1번 상황의 케이스를 떠올리며 \ 를 하나씩 더 붙여줍니다
let str = "힘들다면 당근을 흔들어주세요! \\O\\"
여차저차 만들긴 했는데, 왠지 가독성도 떨어지고 여간 불편한게 아닙니다
그래서 등장한 것이 바로 Swift 5부터 등장한 Raw Strings라는 개념입니다
⎮ Raw Strings
Raw Strings는 특수 문자를 문자 그대로 받아들이는 문자열입니다
뭔가 어려워 보이지만, 사용법 자체는 정말 간단합니다
특수 문자를 사용하고자 하는 문자열에 #을 붙여주면 됩니다
let str = #"철수가 말했습니다. "안녕 영희야""#
let str = #"힘들다면 당근을 흔들어주세요! \O\"#
자, 이제 특수문자를 쉽게 반영할 수 있게 되었습니다!
그러나 이 경우에도 문제점을 가지고 있습니다
상황 1)
디자이너가 줄바꿈을 해달라고 합니다
"OO님, 힘들다면 당근을 흔들어주세요와 이모티콘 줄바꿈을 해주세요"
이럴 땐 어떻게 해야할까요?
let str = #"힘들다면 당근을 흔들어주세요! \n \O\"#
양 옆에 붙은 #으로 인해 특수문자가 Raw하게 출력됩니다
이를 해결할 때도 #을 붙이면 됩니다
let str = #"힘들다면 당근을 흔들어주세요! \#n \O\"#
상황 2)
디자이너가 유저의 이름을 텍스트에 반영해달라고 합니다
"OO님, 힘들다면 당근을 흔들어주세요 \O\"
이럴 땐 어떻게 해야할까요?
String Interpolation(문자열 보간법)을 사용하면 된다는 것은 잘 알고 있습니다
let name = "김유저"
let str = #"\(name)님, 힘들다면 당근을 흔들어주세요! \#n \O\"#
print(str)
이렇게 작성을 하면 다음과 같이 나오게 됩니다
앞서 배웠던 내용들을 통해 우리는 패턴을 기억하고 있습니다
결론부터 말하자면 #을 붙이면 됩니다!
let name = "김유저"
let str = #"\#(name)님, 힘들다면 당근을 흔들어주세요! \#n \O\"#
print(str)
⎮ 결론
문자열 앞뒤에 #을 붙이면 \나 "" 같은 기호를 사용할 수 있습니다
줄바꿈이나 문자열 보간법 같이 \를 기호 자체로 사용하지 않을 때는 사이에 #을 붙이면 됩니다
⎮ Reference
Base: SeSAC 내부 비공개 강의 자료
https://github.com/swiftlang/swift-evolution/blob/main/proposals/0200-raw-string-escaping.md
swift-evolution/proposals/0200-raw-string-escaping.md at main · swiftlang/swift-evolution
This maintains proposals for changes and user-visible enhancements to the Swift Programming Language. - swiftlang/swift-evolution
github.com