Strings And Characters - Swift

Một chuỗi – String – là dãy các ký tự , như là “hello, world” hoặc “albatross”. Chuỗi Swift được đại diện bởi kiểu String. Nội dung của String có thể được truy cập bởi nhiều cách khác nhau, bao gồm như một tập hợp của những ký tự giá trị.

Kiểu String và Character của Swift cung cấp nhanh, phù hợp cách mã Unicode làm việc với văn bản trong code của bạn. Cú pháp để chuỗi tạo ra và thao tác là nhẹ nhàng và dễ đọc , với một cú pháp chuỗi giá trị hằng mà tương tự với C. Ghép ( concatenation ) chuỗi thì đơn giản như Cônngj cùng hai chuỗi với toán tử + , và thay đổi chuỗi được quản lý bởi lựa chọn giữa hằng hoặc biến, như bất kỳ giá trị nào khác trong Swift. Bạn cũng có thể sử dụng chuỗi để chèn hằng, biến, giá trị hằng, và biểu thức vào trong những chuỗi dài hơn, trong một quá trình được biết như là nội suy chuỗi. Điều này làm cho nó dễ dàng để tạo ra chuỗi giá trị tuỳ chỉnh cho hiển thị, lưu trữ và in ấn.

Bất chấp tính đơn gỉan này của cú pháp, kiểu String của Swift thì nhanh, thực thi các chuỗi mới. Mọi Chuỗi được kết hợp với các ký tự Unicode mã hoá độc lập, và cung cấp hỗ trợ cho việc truy cập những ký tự đó trong các đại diện Unicode khác nhau.

Lưu ý : Kiểu String của Swift được nối với lớp NSString của Foundation. Nếu bạn đang làm việc với framework Foundation trong Cocoa, toàn bộ API NSString có sẵn để gọi bất kỳ giá trị String nào bạn tạo khi ép kiểu tới NSString, như được mô tả trong AnyObject. Bạn cũng có thể sử dụng một giá trị NSString với bất kỳ API mà yêu cầu một thể hiện NSString.

String Literals – Chuỗi giá trị hằng 

Bạn có thể tính đến những giá trị String định nghĩa trước trong cùng code của bạn như chuỗi giá trị hằng. Một chuỗi giá trị hằng được đặt vào dãy các kí tự được bao quanh bởi một cặp ngoặc kép ( ”  ” )

Sử dụng một chuỗi giá trị hằng như là một giá trị khởi tạo cho một hằng hoặc biến.

Screen Shot 2016-01-28 at 5.40.17 PM

Lưu ý rằng Swift gợi ý một kiểu String cho hằng someString , bởi vì nó được khởi tạo với một chuỗi giá trị hằng

Lưu ý : Thông tin về sử dụng những ký tự đặc biệt trong chuỗi giá trị hằng , xem Special Characters in String Literals

Initializing an Empty String – khởi tạo một chuỗi rỗng. 

Để tạo một Chuỗi giá trị rỗng như điểm bắt đầu cho xây dựng một chuỗi dài hơn , gán một giá trị hằng rỗng cho một biến, hoặc khởi tạo một thể hiện chuỗi mới với cú pháp khởi tạo :

Screen Shot 2016-01-28 at 6.07.23 PM

Tìm ra một trong hai giá trị String là rỗng bằng cách kiểm tra thuộc tính isEmpty Boolean của nó :

Screen Shot 2016-01-28 at 6.09.35 PM

String Mutability – Chuỗi biến đổi 

Bạn chỉ ra dù một String riêng biệt có thể được chỉnh sửa ( hoặc thay đổi ) bằng cách gán nó cho một biến ( trong trường hợp mà nó có thể được chỉnh sửa ), hoặc tới một hằng số ( trong trường hợp mà không thể được chỉnh sửa ).

Screen Shot 2016-01-28 at 6.26.37 PM

Lưu ý : Phương pháp tiếp cận này thì khác biệt với chuỗi biến đổi trong Objective-C và Cocoa, nơi bạn được lựa chọn giữa hai lớp ( NSString và NSMutableString ) để chỉ ra một trong hai chuỗi có thể được biến đổi

Strings Are Value Types – Chuỗi là một kiểu giá trị 

Kiểu Chuỗi của Swift là một kiểu giá trị . Nếu bạn tạo ra một Chuỗi giá trị mới, Chuỗi giá trị đó được sao chép khi nó được truyền tới một hàm hoặc phương thức, hoặc khi nó được gán tới một hằng hoặc biến. Trong mỗi trường hợp , bản sao mới của Chuỗi giá trị đang tồn tại được tạo thành, vàn bản sao mới được truyền hoặc gán, không phải là bản gốc. Kiểu giá trị được mô tả trong Structures and Enumerations Are Value Types

Hành vi sao chép mặc định Chuỗi của Swift đảm bảo rằng khi một hàm hoặc một phương thức truyền qua bạn một Chuỗi giá trị, nó rõ ràng rằng bạn nhìn nhận giá trị Chuỗi chính xác đó, bất chấp nơi nó tới. Bạn có thể tin chắc rằng Chuỗi bạn được truyền qua sẽ không được chỉnh sửa trừ khi bạn chỉnh sửa nó cho mình

Đứng phía sau , trình biên dịch của Swift tối ưu hoá sử dụng chuỗi để sao chép thực tế chỉ diễn ra khi thực sự cần thiết. Điều này có nghĩa là bạn luôn có hiệu năng tuyệt vời khi đang làm việc với chuỗi như là kiểu giá trị

Working with Characters – Làm việc với các ký tự

Bạn có thể truy cập vào những giá trị Ký tự riêng trong một chuỗi bằng cách duyệt qua thuộc characters của nó với một vòng lặp for-in :

Screen Shot 2016-01-28 at 6.50.34 PM

Vòng lặp for-in được mô tả trong For Loops 

Như một sự lựa chọn, bạn có thể tạo một hằng hoặc biến ký tự độc lập từ một chuỗi ký tự đơn bằng cách cung cấp một kiểu Ký tự anotation :

Screen Shot 2016-01-28 at 6.56.39 PM

Chuỗi giá trị có thể được xây dựng bằng cách truỳen một mảng giá trị ký tự như một đối số tới phương thức khởi tạo của nó :

Screen Shot 2016-01-28 at 6.58.26 PM

Concatenating Strings and Characters – Nối chuỗi và ký tự 

Chuỗi giá trị có thể được thêm vào cùng nhau ( hoặc nối ) cùng toán tử ( + ) để tạo một Chuỗi giá trị mới :

Screen Shot 2016-01-28 at 10.15.17 PM

Bạn cũng có thể thêm vào một Chuỗi giá trị với một biến Chuỗi đang tồn tại với toán tử ( += ) :

Screen Shot 2016-01-28 at 10.18.37 PM

Bạn có thể thêm một Ký tự giá trị tới một biến Chuỗi với phương thức append( ) của kiểu String :

Screen Shot 2016-01-28 at 10.20.09 PM

Lưu ý : bạn không thể thêm vào một Chuỗi hoặc Ký tự tới một biến Ký tự đang tồn tại , bởi vì một Ký tự giá trị cần phải chứa một Ký tự đơn duy nhất.

String Interpolation – Chuỗi nội suy 

Chuỗi nội suy là một cách để xây dựng một Chuỗi giá trị mới từ việc trộn hằng, biến , giá trị hằng và biểu thức bằng cách chứa trong giá trị của chúng biên trong một chuỗi hằng. Mỗi item mà bạn chèn vào trong chuỗi hằng được đóng gói trong một cặp ngặc đơn , đằng trước là một dấu ngạch chéo xuống :

Screen Shot 2016-01-28 at 10.45.21 PM

Trong ví dụ bên trên, giá trị multiplier được chèn vào bên trong một chuỗi hằng là \(multiplier). Chỗ trống đó được thay thế với giá trị hiện tại là multiplier khi chuỗi nội suy  được đánh giá để tạo ra một chuỗi hiện hành.

Giá trị multiplier cũng là một phần của biểu thức lớn hơn sau này trong chuỗi. Biểu thức này tính toán giá trị của Double(multiplier)*2.5 và chèn kết quả (7.5) vào trong chuỗi . Trong trường hợp lày, Biểu thức được viết là \(Double(multiplier)*2.5) khi nó được bao gồm bên trong của chuỗi hằng.

Lưu ý : Biểu thức bạn viết bên trong ngoặc đơn cùng trong một chuỗi được nội suy không thể chứa một gạch chéo xuống, một carriage return ,hoặc một line feed.

Unicode

Unicode là một chuẩn quốc thế cho mã hoá, biểu diễn , và xử lý văn bản trong hệ thống viết khác nhau. Nó cho phép bạn đại diện bất kỳ ký tự nào từ bất kỳ ngôn ngữ nào trong một mẫu tiêu chuẩn hoá , và để đọc và viết những kí tự tới và từ một nguồn bên ngoài như một tập tin văn bản hoặc trang web. Kiểu String và Character của Swift thì hoàn toàn theo chuẩn mực Unicode , như được mô tả trong phần này.

Unicode Scalars

Special Characters in String Literals

Extended Grapheme Clusters

Counting Characters – Đếm ký tự 

Để lấy ra một tổng các giá trị Character trong một chuỗi, sử dụng thuộc tính count của thuộc tính character của chuỗi :

Screen Shot 2016-01-29 at 12.10.14 AM

Lưu ý rằng sử dụng mở extended grapheme clusters cho giá trị Character của Swift nghĩa là chuỗi nối và thay đổi có thể không luôn luôn ảnh hưởng tới biến đếm-count–  của một chuỗi

Ví dụ, nếu bạn khởi tạo một chuỗi với một từ 4 chữ cafe , và sau đó thêm vào một COMBINING ACUTE ACCENT(U+0301) tới cuối chuỗi , kết quả chuỗi sẽ vẫn có một biến ký tự là 4 , với một ký tự thứ tư là é, không phải e.

Screen Shot 2016-01-29 at 12.19.25 AM

Lưu ý : Extended grapheme clusters có thể được kết hợp với một hoặc nhiều Unicode scalar. Điều này có nghĩa là những ký tự khác biệt – và trình bày sự khác biệt của ký tự tương tự – có thể yêu cầu số lượng khác biệt của bộ nhớ để lưu trữ. Vì điều này, các ký tự trong Swift không chiếm giữ mỗi số lượng bộ nhớ giống nhau cùng trong một đại diện của chuỗi. Kết quả là, số của ký tự trong một chuỗi không thể được tính toán mà không lặp lại qua chuỗi để xác định phạm vi grapheme cluster mở rộng của nó. Nếu bạn đang làm việc với những chuỗi giá trị dài cụ thể,  nhận thức được rằng thuộc tính characters cần phải lặp qua Unicode scalar trong toàn bộ chuỗi theo thứ tự được xác định ký tự cho chuỗi đó.

Biến đếm của những ký tự được trả về bởi thuộc tính characters thì không luôn luôn giống như thuộc tính length của NSString mà chứa những ký tự tương tự. Length của NSString được dựa trên số đơn vị code 16-bit cùng trong đại diện UTF-16 của chuỗi và không có số của Unicode extended grapheme clusters cùng trong chuỗi.

Assessing and Modifying a String – truy cập và sửa đổi một Chuỗi

Bạn truy cập và sửa đổi một chuỗi thông qua phương thức và thuộc tính của nó , hoặc bằng cách sử dụng cú pháp subscript

String Indices – Chỉ số chuỗi 

Mỗi Chuỗi giá trị có một liên kết kiểu chỉ số , String.Index , mà tương ứng tới vị trí của mỗi Character trong chuỗi.

Như được đề cập bên trên,  những ký tự khác biệt có thể yêu cầu số lượng bộ nhớ riêng biệt để lưu trữ , vì để xác định Character nào ở tại một vị trí cụ thể, bạn cần phải lặp qua mỗi Unicode scalar từ khi bắt đầu hoặc kết thúc của String đó. Với lý do này, những chuỗi của Swift không thể được chỉ rõ bởi những giá trị nguyên

Sử dụng thuộc tính startIndex để truy cập vị trí của Character đầu tiên của một String. Thuộc tính endIndex là vị trí sau ký tự cuối của một chuỗi. Kết quả là, thuộc tính endIndex thì không là một đối số hợp lệ với subscipt của chuỗi. Nếu một chuỗi mà rỗng , startIndexendIndex bằng nhau.

Một giá trị String.Index có thể truy cập chỉ số đứng ngay trước bằng cách gọi phương thức predecessor( ), và chỉ số kế tiếp bằng cách gọi phương thức successor( ). Bất kỳ chỉ số nào trong một String có thể được truy cập từ bất kỳ chỉ số khác bằng cách nối những phương thức này cùng nhau, hoặc bằng cách sử dụng phương thức advancedBy(_:). Cố gắng truy cập một giá trị bên ngoài phạm vi của một chuỗi sẽ kích hoạt một lỗi thời gian chạy

bạn có thể sử dụng cú pháp subscript để truy cập Character tại một chỉ số Chuỗi cụ thể :

Screen Shot 2016-01-29 at 10.45.21 AM

Cố gắng truy cập một Character tại một chỉ số bên ngoài phạm vi của chuỗi sẽ kích hoạt một lỗi thời gian chạy

Screen Shot 2016-01-29 at 11.03.24 AM

Sử dụng thuộc tính indices của thuộc tính characters để tạo một dãy- Range – của tất cả những chỉ số được sử dụng để truy cập các ký tự đặc biệt trong một chuỗi.

Screen Shot 2016-01-29 at 11.07.30 AM

Inserting and Removing – Chèn và Xoá 

Để chèn một ký tự vào trong một chuỗi tại một vị trí đặc biệt, sử dụng phương thức insert(_:atIndex:).

Screen Shot 2016-01-29 at 11.16.27 AM

Để chèn nội dung của một chuỗi khác tại một chỉ số đặc biệt , sử dụng phương thức insertContentsOf(_:at:)

Screen Shot 2016-01-29 at 11.17.57 AM

Để xoá một ký tự từ một chuỗi tại một chỉ số đặc biệt , sử dụng phương thức removeAtIndex(_:)

Screen Shot 2016-01-29 at 11.19.15 AM

Để xoá một chuỗi con tại một phạm vi đặc biệt , sử dụng phương thức removeRange( ):

Screen Shot 2016-01-29 at 11.20.25 AM

Compareing Strings – So sánh Chuỗi

Swift cung cấp ba cách để so sánh các giá trị văn bản : đẳng thức chuỗi và ký tự, đẳng thức tiền tố, và đẳng thức hậu tố .

String and Character Equality 

String and Character Equality được kiểm tra với toán tử “equal to – == ” và toán tử ” not equal to – != “, như mô tả trong Comparison Operators :

Screen Shot 2016-01-29 at 12.03.51 PM

Hai chuỗi giá trị ( hoặc hai Ký tự giá trị ) được xem là bằng nếu extended grapheme clusters của chúng có kiểu mẫu tương đương – canonically equivalent. Extended grapheme clusters có kiểu mẫu tương đương nếu chúng có ý nghĩa ngôn ngữ và xuất hiện giống nhau , ngay cả khi nếu chúng được kết hợp từ những Unicode scalar khác biệt đằng sau khung cảnh.

Ví dụ , LATIN SMALL LETTER E WITH ACUTE(U+00E9) là kiểu mẫu tương đương với LATIN SMALL LETTER E(U+0065) được theo sau bởi COMBINING ACUTE ACCENT(U+0301). Hai extended grapheme clusters này là cách hợp lệ để đại diện cho ký tự é , và do đó chúng xem là kiểu mẫu tương đương.

Screen Shot 2016-01-29 at 12.15.32 PM

Ngược lại , LATIN CAPITAL LETTER A(U+0041, hoặc “A”) , như được sử dụng trong tiếng Anh , thì không tương đương với CYRILLIC CAPITAL LETTER A(U+0410, hoặc “A”) , như được sử dụng trong tiếng Nga. Những ký tự nhìn giống nhau , nhưng không có ý nghĩa ngôn ngữ tương tự :

Screen Shot 2016-01-29 at 12.26.41 PM

Lưu ý : So sánh Chuỗi và Ký tự trong Swift thì không locale-sensivite.

Prefix and Suffix Equality – Đẳng thức  Tiền tố và hậu tố 

Để kiểm tra dù một chuỗi có một tiền tố hoặc hậu tố chuỗi cụ thể, gọi phương thức hasPrefix(_:) hasSuffix(_:) của chuỗi , hai phương thức này mang đối số duy nhất của kiểu String và trả về một giá trị Boolean.

Ví dụ bên dưới xét một mảng của chuỗi đại diên vị trí khung cảnh từ hai cảnh đầu tiên Vở Romeo và Juliet của Shakespeare :

Screen Shot 2016-01-29 at 12.41.07 PM

Bạn có thể sử dụng phương thức hasPrefix(_: ) với mảng romeoAndJulie để đếm số khung cảnh trong Cảnh 1 của buổi biểu diễn :

Screen Shot 2016-01-29 at 12.42.19 PM

Tương tự, sử dụng phương thức hasSuffix(_:) để đếm số khung cảnh diễn ra trong hoặc xung quanh lâu đài Capulet và phòng của Friat Lawrence :

Screen Shot 2016-01-29 at 12.45.56 PM

Lưu ý : các phương thức hasPrefix(_:)hasSuffix(_:) thực hiện một kiểu mẫu tương đương ký tự – bằng – ký tự so sánh giữa extended grapheme clusters trong mỗi chuỗi như mô tả trong String và Character Equality.

Unicode Representations of Strings

UTF-8 Representation

UTF-16 Representation

Unicode Scalar Representation

Share this:

  • X
  • Facebook
Like Loading...

Từ khóa » ép Kiểu Trong Swift