Contents
Chào mừng bạn đến với Fx Studio. Chủ đề bài viết lần này là Raw String. Đây là một chủ đề khá nhỏ trong vũ trụ iOS & Swift nói chung. Tuy nhiên, nó lại có một tầm ảnh hưởng không hề nhỏ. Nên khi bạn nắm bắt được Raw String, thì có sẽ có thêm một vũ khí rất mạnh trong tay.
Còn nếu mọi việc đã ổn rồi, thì …
Bắt đầu thôi!
Chuẩn bị
Raw String được giới thiệu trong Swift 5, do đó bạn cần chuẩn bị các phiên bản Xcode & iOS phù hợp với Swift 5 nhóe. Còn về kiến thức, bạn chỉ cần nắm được lập trình Swift cơ bản, hoặc iOS cơ bản là đủ rồi.
Nếu bạn chưa biết gì về lập trình iOS hay Swift, thì có thể bắt đầu với bài viết trong link dưới đây.
Raw String là gì?
Bắt đầu, chúng ta hãy lấy ví dụ về 2 cách khai báo một chuỗi String với Swift 5 nhóe. Xem ví dụ code sau:
let regularString = "\\Hello \\World" print(regularString) let rawString = #"\Hello \World"# print(rawString)
Bạn cũng đã nhận ra sự khác biệt đơn giản đến từ 2 kiểu String này rồi. Đó chính là dấu #
được thêm vào đầu & cuối của chuỗi String. Lúc này, ta sẽ tiết kiệm đi việc thêm các dấu \
khi muốn các kí tự đặc biệt xuất hiện trong chuỗi String của mình.
Đó được gọi là Raw String.
Khá đơn giản phải không nào. Việc đưa Raw String vào Swift 5 không chỉ đơn giản như vậy. Chúng ta tiếp tục xem có gì hay với dấu #
này tiếp nhóe.
Sử dụng dấu #
Cơ bản
Ta bắt đầu với việc sử dụng #
cơ bản nhất nhóe. Xem ví dụ code sau:
let stringSwift4 = "This is \"Swift 4.x\"." print(stringSwift4) let stringSwift5 = #"This is "Swift 5.x"."# print(stringSwift5)
Khi khai báo & kết thúc chuổi 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. Nó tiết kiệm đi rất nhiều việc phải thêm các dấu \
.
Giá trị
Tiếp tục, ta xem qua ví dụ code sau nhóe!
func useOfVariableWithString() { var intSwift = 4 let stringSwift4 = "This is \"Swift \(intSwift).x\" with variable." print(stringSwift4) intSwift = 5 let stringSwift5 = #"This is "Swift \#(intSwift).x" with variable."# print(stringSwift5) } useOfVariableWithString()
Với String bình thường, ta sẽ sử dụng cú pháp \(biến)
để đư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. Cú pháp như sau:
#(variableName)
Và nó vẫn không có gì là phức tạp nhóe.
Nhiều dòng
Đặc sản tiếp theo mà Swift mang lại trong String, đó là bạn có thể đưa một đoạn văn bản vào biến String. Với String bình thường, ta sẽ sử dụng “”” để bắt đầu và kết thúc chuỗi. Còn với Raw String thì ta sẽ thêm #
vào đầu vào cuối chuỗi đó.
Ta xem ví dụ code sau nhóe!
let example = "Ahihi" let message = #""" This is rendered as text: \(example). This uses string interpolation: \#(example). """# print(message)
Cũng khá EZ phải không nào. Ahihi!
String với dấu #
Có một điều vui nữa là khi bạn muốn sử dụng kí tự #
trong Raw String, thì sẽ như thế nào. Ta xem qua đoạn code sau:
let str = #"My dog said "woof"#gooddog"#
Tất nhiên, 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. Biến tấu thêm một chút bạn nhóe.
let str = ##"My dog said "woof"#gooddog"## print(str)
Chúng ta đã in ra được đầy đủ các dấu "
& #
. Bạn cũng nhận ra rằng 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 nhóe.
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"####
Cuộc sống cũng khá nhiều niềm vui phải không nào.
Lợi ích của Raw String
Lợi ích mà Raw String mang lại chính là việc đơn giản hóa đi chuỗi. Bạn đọc code sẽ dễ tiếp cận nhiều hơn. Ngoài ra, việc ảnh hưởng trực tiếp chính là việc áp dụng Raw String vào biểu thức chính quy.
Ta xem một ví dụ đơn giản là tìm Key Path với biểu thức chính quy nhóe. Ta có function sau:
func match(pattern: String, sample: String) { let regex = try! NSRegularExpression(pattern: pattern, options: .caseInsensitive) let results = regex.matches(in: sample, range: NSRange(location: 0, length: sample.utf16.count)) if results.count != 0 { print("MATCH") } else { print("NO MATCH") } }
Function thì đơn giản rồi. Ta xem qua mẫu của biểu thức chính quy và đoạn text ví dụ luôn nhóe.
let pattern1 = "\\\\[A-Z]+[A-Za-z]+\\.[a-z]+" let testString1 = "\\Persion.name" match(pattern: pattern1, sample: testString1)
Khá là rối mắt.
Khi có quá nhiều dấu \
xuất hiện trong mẫu. Càng khó khăn hơn, khi mỗi ngôn ngữ lập trình lại có cách quy định khác nhau về ký tự \
trong kiểu chuỗi của chúng.
Bạn thử vào regex101.com và đưa đoạn mẫu pattern1
kia để kiểm tra. Kết quả sẽ không bao giờ MATCH được. Vì Swift với String bình thường đã thêm \
để hiển thị dấu \
trong chuỗi mẫu.
Do đó, bạn thử xóa đi 1 nữa số lượng dấu \
và kiểm tra trên website đó. Xem kết quả có MATCH không. Ta có mẫu mới như sau:
\[A-Z]+[A-Za-z]+.[a-z]+
Và bạn thử áp dụng nó với Raw String trong code Swift nhóe. Xem qua ví dụ dưới đây.
let pattern2 = #"\\[A-Z]+[A-Za-z]+\.[a-z]+"# let testString2 = #"\Persion.name"# match(pattern: pattern2, sample: testString2)
Bây giờ, mọi thứ đã về đúng bản chất rồi nhóe. Bạn không cần quá bận tâm nhiều với mấy cái dấu \
à. Ahihi!
Tạm kết
- Tìm hiểu & sử dụng Raw String
- Các ví dụ áp dụng nó vào trong code
- Đơn giản hóa việc sử dụng trong biểu thức chính quy
Okay! Tới đây, mình xin kết thúc bài viết về Raw String trong Swift . Nếu có gì thắc mắc hay góp ý cho mình thì bạn có thể để lại bình luận hoặc gửi email theo trang Contact.
Cảm ơn bạn đã đọc bài viết này!
Related Posts:
Written by chuotfx
Hãy ngồi xuống, uống miếng bánh và ăn miếng trà. Chúng ta cùng nhau đàm đạo về đời, về code nhóe!
Leave a Reply Cancel reply
Fan page
Tags
Recent Posts
- Charles Proxy – Phần 1 : Giới thiệu, cài đặt và cấu hình
- Complete Concurrency với Swift 6
- 300 Bài code thiếu nhi bằng Python – Ebook
- Builder Pattern trong 10 phút
- Observer Pattern trong 10 phút
- Memento Pattern trong 10 phút
- Strategy Pattern trong 10 phút
- Automatic Reference Counting (ARC) trong 10 phút
- Autoresizing Masks trong 10 phút
- Regular Expression (Regex) trong Swift
You may also like:
Archives
- September 2024 (1)
- July 2024 (1)
- June 2024 (1)
- May 2024 (4)
- April 2024 (2)
- March 2024 (5)
- January 2024 (4)
- February 2023 (1)
- January 2023 (2)
- November 2022 (2)
- October 2022 (1)
- September 2022 (5)
- August 2022 (6)
- July 2022 (7)
- June 2022 (8)
- May 2022 (5)
- April 2022 (1)
- March 2022 (3)
- February 2022 (5)
- January 2022 (4)
- December 2021 (6)
- November 2021 (8)
- October 2021 (8)
- September 2021 (8)
- August 2021 (8)
- July 2021 (9)
- June 2021 (8)
- May 2021 (7)
- April 2021 (11)
- March 2021 (12)
- February 2021 (3)
- January 2021 (3)
- December 2020 (3)
- November 2020 (9)
- October 2020 (7)
- September 2020 (17)
- August 2020 (1)
- July 2020 (3)
- June 2020 (1)
- May 2020 (2)
- April 2020 (3)
- March 2020 (20)
- February 2020 (5)
- January 2020 (2)
- December 2019 (12)
- November 2019 (12)
- October 2019 (19)
- September 2019 (17)
- August 2019 (10)