Danh sách các cú pháp khai báo khối
Trong suốt, hãy
return_type
là loại đối tượng / nguyên thủy / vv. bạn muốn quay lại (thông thường void
)
blockName
là tên biến của khối bạn đang tạo
var_type
là loại đối tượng / nguyên thủy / vv. bạn muốn chuyển qua làm đối số (để trống không có tham số)
varName
là tên biến của tham số đã cho
Và hãy nhớ rằng bạn có thể tạo bao nhiêu tham số tùy thích.
Khối như biến
Có thể là phổ biến nhất cho khai báo.
return_type (^blockName)(var_type) = ^return_type (var_type varName)
{
// ...
};
Khối là thuộc tính
Giống như khai báo các khối như các biến, tuy nhiên khác nhau một cách tinh tế.
@property (copy) return_type (^blockName) (var_type);
Khối làm tham số
Lưu ý rằng điều này khác với "Khối như đối số"; trong trường hợp này, bạn đang khai báo một phương thức muốn có một đối số khối.
- (void)yourMethod:(return_type (^)(var_type))blockName;
Khối như đối số
Lưu ý rằng điều này khác với "Khối như tham số"; trong trường hợp này, bạn đang gọi một phương thức muốn có một đối số khối với một khối ẩn danh. Nếu bạn đã khai báo một biến khối, việc truyền tên biến làm đối số là đủ.
[someObject doSomethingWithBlock: ^return_type (var_type varName)
{
//...
}];
Khối ẩn danh
Đây thực chất là một khối ẩn danh, tuy nhiên cú pháp gán các khối cho các biến chỉ đơn giản là đặt biến bằng với một khối ẩn danh.
^return_type (var_type varName)
{
//...
};
typedef
Khối
Điều này cho phép bạn thiết lập một tên ngắn có thể được tham chiếu giống như bất kỳ tên lớp nào khác trong quá trình khai báo các khối.
typedef return_type (^blockName)(var_type);
Để sau đó sử dụng blockName
thay vì cú pháp khai báo khối tiêu chuẩn, chỉ cần thay thế.
Chặn Nội tuyến
Đây được cho là việc sử dụng các khối ít hữu ích hơn, nhưng dù sao cũng có thể có vị trí của nó. Một khối nội tuyến là một khối ẩn danh được gọi ngay sau khi khởi tạo.
^return_type (var_type varName)
{
//...
}(var);
Các khối nội tuyến chủ yếu hữu ích cho việc bù đắp phạm vi và gần tương đương với các đoạn mã được phân định bằng dấu ngoặc đơn giản.
{
//...
}
Khối đệ quy
Điều này cho phép bạn gọi một khối từ chính nó, tạo ra một vòng lặp có thể được sử dụng trong các cuộc gọi lại và các cuộc gọi GCD. Phương pháp khởi tạo này không có chu kỳ giữ lại trong ARC.
__block return_type (^blockName)(var_type) = [^return_type (var_type varName)
{
if (returnCondition)
{
blockName = nil;
return;
}
// ...
} copy];
blockName(varValue);
Khối trở về
Một phương thức có thể trả về một khối,
- (return_type(^)(var_type))methodName
{
// ...
}
như một chức năng có thể, nếu một chút lạ lùng.
return_type (^FunctionName())(var_type)
{
// ...
}
Phụ lục
Nếu tôi bỏ lỡ bất cứ điều gì, xin vui lòng cho tôi biết trong các nhận xét và tôi sẽ nghiên cứu / thêm chúng.
Ồ, và trong Swift ...
blockName = (varName: var_type) -> (return_type)
Nó gần giống như đó là một tính năng ngôn ngữ.