Hãy phá vỡ nó xuống:
public func split(maxSplit: Int = default, allowEmptySlices: Bool = default, @noescape isSeparator: (Self.Generator.Element) throws -> Bool) rethrows -> [Self.SubSequence]
maxSplit
: Tham số đầu tiên, maxSplit
, cho phép bạn xác định số lượng tối đa miếng mà trình tự sẽ được chia thành. Giá trị mặc định là Int.max
.
allowEmptySlices
: Tham số thứ hai, allowEmptySlices
chỉ định xem hai dấu tách liên tiếp trong chuỗi có dẫn đến lát trống không. Giá trị mặc định là false
. Ví dụ: nếu bạn có một Chuỗi, "A..B"
và bạn chia thành các ký tự .
, bạn có thể kết thúc với hai mục (["A", "B"]
) hoặc ba (["A", "", "B"]
) trong mảng đầu ra tùy thuộc vào những gì bạn chuyển cho tham số này.
isSeparator
: Thông số cuối cùng là đóng cửa mà bạn vượt qua để xác định vị trí tách chuỗi.
Vì cả hai maxSplit
và allowEmptySlices
đều có đối số mặc định, bạn không cần phải đưa chúng vào cuộc gọi chức năng của mình trừ khi bạn muốn thay đổi chúng. Thông số duy nhất mà bạn phải cung cấp là đóng cửa isSeparator
.
Trong trường hợp của bạn, bạn gọi:
someString.characters.split { $0 == "."}
... đó là tương đương với:
someString.characters.split(maxSplit: Int.max, allowEmptySlices: false) { $0 == ".' }
Bạn cũng có thể viết lời gọi hàm của bạn như thế này:
someString.characters.split(isSeparator: { $0 == "." })
Cách mà bạn đã viết nó sử dụng cú pháp "đóng dấu sau". Nếu một hàm có một kết thúc như đó là tranh luận cuối cùng, bạn có thể chuyển việc đóng cửa ngoài ngoặc như thế này:
someString.characters.split() { $0 == "." }
Và nếu chức năng mất chỉ có một lập luận (không kể bất kỳ đối số mặc định mà bạn đang không cung cấp) thì bạn có thể bỏ qua các dấu ngoặc hoàn toàn:
someString.characters.split { $0 == "." }
Ở cấp độ cao nhất, những gì xảy ra là split
lặp thông qua một chuỗi các ký tự. Nó kiểm tra từng ký tự bằng cách sử dụng đóng cửa được cung cấp, và nếu đóng cửa trả về true
, nó tách chuỗi trên ký tự đó. Trong trường hợp của bạn, nó sẽ phân chia chuỗi ký tự mỗi khi nó nằm trong một số "."
.
Một số lưu ý khác:
rethrows
: Toàn bộ chức năng được đánh dấu rethrows
. Nó sẽ ném một lỗi, nhưng chỉ khi đóng cửa mà bạn vượt qua cho đối số isSeparator
ném một lỗi chính nó. Lưu ý rằng tham số isSeparator
cho phép bạn vượt qua một kết thúc có thể gây ra lỗi, nhưng bạn không phải làm như vậy. Bất cứ lúc nào một hàm chấp nhận một đóng mà ném một lỗi, nó cũng sẽ chấp nhận một đóng mà không ném. Điều này là do các chức năng không ném là một loại chức năng ném phụ.
@noescape
: Thông số isSeparator
được đánh dấu @noescape
. Điều đó chỉ đơn giản có nghĩa là không có gì trong việc đóng cửa sẽ tồn tại qua cuối cuộc gọi đến split
.