2014-10-30 21 views
14

Với việc đóng cửa tôi thường thêm [yếu tự] vào danh sách chụp tôi và sau đó làm một kiểm tra null trên tự:là tự chụp trong vòng một hàm lồng nhau

func myInstanceMethod() 
{ 
    let myClosure = 
    { 
     [weak self] (result : Bool) in 
     if let this = self 
     { 
      this.anotherInstanceMethod() 
     } 
    } 

    functionExpectingClosure(myClosure) 
} 

Làm thế nào để thực hiện việc kiểm tra null trên tự nếu tôi đang sử dụng một hàm lồng nhau thay cho một kết thúc (hoặc là kiểm tra thậm chí cần thiết ... hoặc là nó thực hành thậm chí tốt để sử dụng một hàm lồng nhau như thế này) tức là

func myInstanceMethod() 
{ 
    func nestedFunction(result : Bool) 
    { 
     anotherInstanceMethod() 
    } 

    functionExpectingClosure(nestedFunction) 
} 

Trả lời

19

Thật không may, chỉ đóng cửa có "Capture Liệt kê "tính năng như [weak self]. Đối với các hàm lồng nhau, Bạn phải sử dụng các biến số weak hoặc unowned bình thường.

func myInstanceMethod() { 
    weak var _self = self 
    func nestedFunction(result : Bool) { 
     _self?.anotherInstanceMethod() 
    } 

    functionExpectingClosure(nestedFunction) 
} 
+3

Đây có phải là tài liệu chính thức không? –

+0

Dường như đây là sự thật. Tôi đã làm một thử nghiệm và yếu từ việc đóng cửa không được chuyển vào bản thân trong hàm lồng nhau. Vì vậy, nhiều cho mã sạch. – possen

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