2016-03-19 7 views
1

私は比較的新しいSwiftです。クロージャの概念をまだ把握しています。 私はすでにこの投稿(Anonymous closure can not be used inside a closure that has explicit arguments)を読んでいます。 しかし、答えはフィルタを()から{}に変更することですが、私はそれを自分の関数に実装する方法はわかりません。明示的な引数を持つクロージャの中で、匿名のクロージャ引数を使用することはできません。

<<< ImageRow() 
      { 
       $0.tag = "Image" 
       $0.title = "Choose your profile pic" 
       if let tutorPic = currentuser!.objectForKey("ProfPhoto") as! PFFile! 
       { 
        tutorPic.getDataInBackgroundWithBlock({(imageData:NSData?,error:NSError?)->Void in 
         if(error == nil) 
         { 
          let image = UIImage(data: imageData!) 
          print("YOOWAHH") 
          print(image) 
          print("***********") 
          self.imagez = image 
          print(self.imagez) 
          $0.value = imagez 


         } 
        }) 


       } 


     } 

エラーがライン$0.value = imagezです。

私はParseから画像データをダウンロードし、フォームのデフォルト値として設定したいと思っています。コンパイラはすでに明示的な引数を持っていると言っているので、代わりにフォームの引数を参照する方法はわかりません。この?

答えて

2

問題は、各ブロックがディスパッチなどのために個別に処理されるため、$0の別のブロックへの参照を適切に戻す方法がわからないことです。囲みブロックを明示的に定義したかどうかにかかわらず、コンパイラは、あなたが$0と言ったときにそれがあなたが意味するブロックであると仮定しようとします。

これを解決するには、トップブロックでlet myButton = $0と発声してから、囲みブロックのmyButtonを参照してください。

ブロックの形式がわからない場合は、単に関数呼び出しを書き直すだけで、オートコンプリートを実行すると残りのブロック形式が元の状態に戻ります。

関連する問題