2015-12-16 17 views
7

例えば[weak self]()弱い自己対弱い自己の差()

を通る対クロージャの引数として[weak self]を渡すの違いは何である:

dispatch_async(dispatch_get_main_queue()) { [weak self] in 
    //Some code here 
} 

V/S

dispatch_async(dispatch_get_main_queue()) { [weak self]() -> Void in 
    //Some code here 
} 
+0

@ MartinR更新コード。実際、いくつかの実装では、[弱い自己]が丸い括弧なしで使用されていると表示されていますが、一部では[弱い自己]()として使用されています。これら2つの違いは何ですか? –

答えて

9

[weak self]()を引数としてクロージャに渡さないでください。

  • [weak self]キャプチャリストあり、
  • パラメータリスト/戻り型の閉鎖式の宣言() -> Void

に先行します。彼らは 文脈から推測できる場合

戻り値の型または両方のパラメータリストと型を返すを省略することができるので、これらすべてが 有効と完全に等価です:

dispatch_async(dispatch_get_main_queue()) { [weak self]() -> Void in 
    self?.doSomething() 
} 

dispatch_async(dispatch_get_main_queue()) { [weak self]() in 
    self?.doSomething() 
} 

dispatch_async(dispatch_get_main_queue()) { [weak self] in 
    self?.doSomething() 
} 

閉鎖は空のパラメータを取りますリスト()Void の戻り値の型があります。

+0

()=無効。明快にするためには、()の代わりにVoidを選ぶべきです。したがって、これはVoid - > Voidでなければなりません。 – Yariv

+0

@ yar1vn:それは個人的な好みの問題かもしれません。空の/ voidのパラメータリストの場合は '()'を、戻り値の型の場合は 'Void'を使用します。それはAppleが 'dispatch_block_t'定義で行うことです。 –

+0

1. dispatch_block_tはSwift funcではありません。 2.スウィフトコミュニティは標準を作成しており、それはVoidを好む。あなたが好きなものを選ぶことができるからです。 – Yariv

関連する問題