nhanh chóng: Khai báo đóng cửa giống như khai báo khối


90

Chúng ta có thể khai báo khối như bên dưới trong Objective-C.

typedef void (^CompletionBlock) (NSString* completionReason);

Tôi đang cố gắng thực hiện việc này nhanh chóng, nó báo lỗi.

func completionFunction(NSString* completionReason){ }
typealias CompletionBlock = completionFunction

Lỗi: Sử dụng 'completeFunction' không được khai báo

Định nghĩa :

var completion: CompletionBlock = { }

làm như thế nào?

Cập nhật:

Theo câu trả lời của @ jtbandes, tôi có thể tạo bao đóng với nhiều đối số như

typealias CompletionBlock = ( completionName : NSString, flag : Int) -> ()

1
@Downvotters: Vui lòng giải thích điều gì sai với câu hỏi này?
Mani

1
có một số người cho rằng chúng ta nên học ngôn ngữ nhanh trước rồi mới viết. Cảm xúc ngu ngốc ...
Janak Nirmal

@Mani Hi, bạn sẽ cũng phiền cho thấy làm thế nào bạn sẽ gán bí danh loại đến một var(ví dụ, var completion: CompletionBlock = {....}sử dụng nhiều tranh cãi Cảm ơn?.
Unheilig

Câu trả lời:


141

Các cú pháp với nhiều loại chức năng(in) -> out.

typealias CompletionBlock = (NSString?) -> Void
// or
typealias CompletionBlock = (result: NSData?, error: NSError?) -> Void
var completion: CompletionBlock = { reason in print(reason) }
var completion: CompletionBlock = { result, error in print(error) }

Lưu ý rằng các dấu ngoặc đơn xung quanh kiểu nhập liệu chỉ được yêu cầu đối với Swift 3+.


Nếu cần nhiều hơn hai đối số, làm thế nào chúng ta có thể làm điều đó? Bạn vui lòng hướng dẫn tôi tham khảo trong cuốn sách đó hoặc bất kỳ cuốn sách nào khác?
Mani

Cuốn sách hay nhất cho Swift: Apple Inc. “Ngôn ngữ lập trình Swift”. iBooks. itun.es/ca/jEUH0.l
David Skrundz

@NSArray Tôi biết chỉ có một cuốn sách để nhanh chóng. Nhưng tôi đang hỏi về điều đó chương tương ứng với chủ đề ... :)
Mani

4
@jtbandes Nó đang hoạt động. Tôi đã tạo với hai đối số làtypealias CompletionBlock = ( completionName : NSString, flag : Int) -> ()
Mani

@zumzum Nó tách tên tham số " reason" khỏi nội dung phương thức " println(reason)"
jtbandes

13

Đây là blog tuyệt vời về việc đóng cửa nhanh chóng.

Dưới đây là một số ví dụ:

Dưới dạng một biến:

var closureName: (inputTypes) -> (outputType)

Là một biến tùy chọn:

var closureName: ((inputTypes) -> (outputType))?

Là một loại bí danh:

typealias closureType = (inputTypes) -> (outputType)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.