2015-04-20 18 views
5

Tôi có một số mã Objective-C mà tôi muốn tìm hiểu để làm như vậy trong nhanh chóng:Tương đương với dispatch_block_t nhanh như thế nào?

dispatch_block_t adjustTooltipVisibility = ^{ 
    self.tooltipView.alpha = _tooltipVisible ? 1.0 : 0.0; 
    self.tooltipTipView.alpha = _tooltipVisible ? 1.0 : 0.0; 
}; 

Cho đến nay tất cả tôi có thể tìm hiểu về các dispatch_block_t là nó được sử dụng trong dispatch_after trong nhanh chóng như một đóng cửa. Vì vậy, tôi có thể hiểu điều đó nhưng tôi không hiểu việc sử dụng nó giống như thế này trong mục tiêu-c và cách chuyển đổi mã này thành mã nhanh chóng

Trả lời

6

dispatch_block_t là một loại bí danh cho một đóng Void -> Void. Swift (như phiên bản 1.2) không suy ra những điều đó rất tốt, vì vậy bạn cần khai báo kiểu. Bạn cũng sẽ cần tham chiếu self một cách rõ ràng để truy cập các thuộc tính mẫu và sẽ muốn đảm bảo rằng bạn không tạo chu trình tham chiếu. Tuyên bố self như weak trong việc đóng cửa là một trong những cách tiếp cận an toàn:

let adjustTooltipVisibility: dispatch_block_t = { [weak self] in 
    if self?._tooltipVisible == true { 
     self?.tooltipView.alpha = 1 
     self?.tooltipTipView.alpha = 1 
    } else { 
     self?.tooltipView.alpha = 0 
     self?.tooltipTipView.alpha = 0 
    } 
} 
+0

Việc sử dụng nó trong trường hợp đó là gì? – Nico

+0

Việc bạn sử dụng bản thân yếu là rất xấu. Một tham chiếu yếu có thể biến mất bất cứ lúc nào, kể cả trong khi một tin nhắn được gửi đi. Tốt hơn nhiều để làm một ban đầu nếu (để mạnh mẽ = tự). – gnasher729

+0

Tại sao 'dispatch_block_t' này được sử dụng cho? Sự khác biệt nếu tôi không sử dụng nó là gì? – Nico

1
let adjustTooltipVisibility:Void->Void = { 
    self.tooltipView.alpha = _tooltipVisible ? 1.0 : 0.0 
    self.tooltipTipView.alpha = _tooltipVisible ? 1.0 : 0.0 
}; 

Nếu có thứ gì đó dẫn đến chu kỳ, bạn nên sử dụng việc bắt giữ tự do. Các loại khối là Void-> Void

+1

Các^là một lỗi sao chép-dán, và bản thân và những suy luận kiểu nên được bổ sung thực sự. Tôi sẽ cập nhật kết quả. – user3349433

Các vấn đề liên quan