Cập nhật cho Swift 3/4:
Một tùy chọn không còn là một biểu thức boolean, và phản func dismissModalViewControllerAnimated(animated: Bool)
không còn có sẵn trong Swift.
Đơn giản chỉ cần khai báo thông số hoàn thành như một kết thúc không bắt buộc, và vượt qua nó trên để
func dismiss(animated flag: Bool, completion: (() -> Void)? = nil)
mà phải mất một đóng cửa không bắt buộc cũng như:
func dismiss(completion: (() -> Void)? = nil) {
self.dismiss(animated: true, completion: completion)
}
Cũ (Swift 1 .x?) answer:
Khai báo các tham số completion
như (ngầm nào) tùy chọn đóng cửa (() -> Void)!
:
func dismiss(completion: (() -> Void)!) {
if (completion) {
return self.dismissViewControllerAnimated(true, completion: completion)
}
self.dismissModalViewControllerAnimated(true)
}
Nhưng lưu ý rằng bạn có thể gọi
self.dismissViewControllerAnimated(true, completion: completion)
trong mọi trường hợp, vì completion
tham số của chức năng đó là tùy chọn như tốt. Và
func dismissModalViewControllerAnimated(animated: Bool)
thực sự được đánh dấu là không dùng nữa.
Nguồn
2014-06-28 12:45:22
Trong trường hợp này cụ thể đó là không quá quan trọng, nhưng lưu ý rằng việc sử dụng tùy chọn ẩn hoàn toàn sẽ gây ra sự cố nếu bạn quên kiểm tra nil trước khi gọi nó. Trong khi nếu bạn sử dụng một tùy chọn thường xuyên như trong câu trả lời của ninja mã, trình biên dịch giúp bạn tiết kiệm từ chính mình và bạn buộc bạn phải hoàn thành viết?() (Không sụp đổ nếu hoàn thành là số không. –
Bạn có thể giải thích tại sao '(() -> Void)! 'Định nghĩa một đóng cửa tùy chọn? Từ những gì tôi đã học được cho đến nay, sẽ không cố gắng này để unwrap một giá trị nil gây ra một lỗi thời gian chạy nếu bạn thông qua một xử lý hoàn thành nil trong? –
@MatthewCawley: Một tùy chọn ẩn hoàn toàn là một tùy chọn là tốt, và có, bạn phải kiểm tra nó nếu nó có thể là nil, đó là những gì 'if (completion)' đã làm. Câu trả lời ở trên khá cũ (Swift 1.x) và tôi phải thừa nhận rằng tôi không nhớ tại sao tôi chọn IUO thay vì tùy chọn mạnh. Có lẽ đó là kiểu tham số của 'func dismissViewControllerAnimated (_: completion:)' tại thời điểm đó. - Nhưng mã đã lỗi thời và sẽ không biên dịch nữa, tôi đã cập nhật nó cho Swift hiện tại. –