Raw String in Swift

by DuongVH21
165 views
This entry is part 1 of 9 in the series Coding

Xin chào tất cả các bạn, lại là mình đây

Hôm nay chúng ta sẽ nâng cấp thêm vũ khí giúp anh em iOS Developer tự tin chiến đấu hơn . Đây là một chủ đề khá nhỏ trong iOS & Swift nói chung, tuy nhiên nó lại có một tầm ảnh hưởng khá là lớn. Nên khi bạn nắm bắt được Raw String, thì có sẽ có thêm một công cụ khá là mạnh trong tay. Let’s goooooo !

Raw String là gì?

Raw String lần đầu được giới thiệu ở Swift 5, cho chúng ta khả năng viết chuỗi tự nhiên hơn, đặc biệt khi sử dụng dấu gạch chéo ngược và dấu ngoặc kép. Trong một số trường hợp, chẳng hạn như biểu thức Regex, chúng ta sẽ thấy được sức mạnh của Raw String.

Swift 5 cung cấp cho chúng ta khả năng khai báo một dấu phân cách chuỗi tùy chỉnh bằng cách sử dụng ký hiệu "#" hay còn được gọi là dấu thăng. Khi bạn sử dụng "#" với một chuỗi, nó sẽ ảnh hưởng đến cách Swift hiểu các ký tự đặc biệt trong chuỗi: “\” không còn hoạt động như một ký tự để thoát chuỗi, vì vậy \n được hiểu là dấu gạch chéo ngược rồi đến chữ “n” thay vì ngắt dòng và \(variable)sẽ được bao gồm dưới dạng các ký tự đó.

Công dụng của Raw String

Đầu tiên hãy đi vào một ví dụ nhỏ

let regularString = "\\Hello \\World"
let rawString = #"\Hello \World"#

Như bạn có thể thấy, ở string thứ 2 sử dụng # để đánh dấu đó là một Raw String, output của hai chuỗi này sẽ như nhau nhưng khi dùng Raw String trông có vẻ sáng sủa hơn nhỉ 😎.

Thêm ví dụ nữa cho mọi người thấy công dụng của Raw String:

let swift4 = "This is \"Swift 4.x\"."
print(swift4)
let swift5 = #"This is "Swift 5.x"."#
print(swift5)

Trông có vẻ rõ ràng hơn rồi, khai báo & kết thúc một String với dấu #, ta có thể sử dụng các kí tự đặc biệt như là một kí tự bình thường trong chuỗi, giúp chúng ta không phải sử dụng thêm các dấu \ làm code trông khá là lú 🤨.

Raw String với Variable

let name = "Techover"
let greeting = #"Hello, \#(name)!"#
print(greeting)

Với String bình thường, ta sẽ sử dụng cú pháp <strong>\(variableName)</strong> để đưa giá trị biến vào chuỗi. Còn với Raw String ta sẽ phải thêm dấu # vào nữa như ví dụ bên trên.

Raw String với Multi-line

let example = "Hello bro"
let message = #"""
This is rendered as text: \(example).
This uses string interpolation: \#(example).
"""#
print(message)

Cũng khá là easy và tiện lợi nhỉ, không như String xuống dòng linh tinh cái là đi ngay 😮‍💨

Raw String với dấu #

Khi muốn sử dụng dấu # trong một Raw String sẽ khác một chút đó

let str = #"My dog said "woof"#gooddog"#

Xcode sẽ ngăn cản bạn thực hiện đoạn code trên. Vì nó sẽ xác định dấu # tiếp theo là kết thúc chuỗi Raw String rồi. Do đó, phần còn lại sẽ trở thành lỗi. Chế cháo đi một tí mới hết lỗi nè

let str = ##"My dog said "woof"#gooddog"##
print(str)

Như trên, output của chúng ta sẽ có đầy đủ các dấu " & # luôn. Như vậy, khi ta khai báo bao nhiêu dấu # ở đầu, thì sẽ phải có bấy nhiêu dấu # ở cuối của Raw String. Lúc này, Raw String của ta mới có ý nghĩa.

let zero = "This is a string"
let one = #"This is a string"#
let two = ##"This is a string"##
let three = ###"This is a string"###
let four = ####"This is a string"####

Lan man một hồi giờ tổng kết lại nè

Raw String hữu ích vì một lý do: Đơn giản hóa String, giúp chúng ta dễ đọc dễ tiếp cận và dễ dàng sửa chữa

Đặc biệt trong các biểu thức Regex, khi mà chúng ta phải sử dụng rất nhiều kí tự đặc biệt, một ví dụ về một biểu thức Regex khá là nhiều dấu \

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

Tuy nhiên với Raw String, chúng ta có thể bớt đi một nửa số dấu \ chúng ta sử dụng. Đơn giản biểu thức của chúng ta sẽ còn lại là:

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

Lời kết

Như vậy là sau một hồi bàn luận về Raw String, hi vọng các bạn có thể áp dụng được vào code của mình để code của chúng ta ngày càng xịn sò hơn. Cảm ơn các bạn vì đã đọc bài viết này. Hẹn gặp lại các bạn ở các post tiếp theo 🤩

Series Navigation<< SSL Pinning & Signature checking(SecureCoding – P2)<< Review Source code<< Giao thức bảo mật HTTPS và MITM attack(Secure Coding P1)<< Tại sao nên hạn chế sử dụng Singleton, static function(util class, Helper class)?<< The Good, The Bad and the Ugly<< Media Player (Part2) – Add Record function vào IJKPlayer trên Android<< Media Player (Part1) – RTSP Player AndroidIf / switch expression – Swift 5.9 (P.1) >>

Leave a Comment

* By using this form you agree with the storage and handling of your data by this website.

You may also like