2015-11-20 38 views
0

我在網上到處搜索,但無法真正處理我找到的答案。所以如果有人可以幫助我,這是值得讚賞的。傻瓜式自定義函數的CompletionHandler

我寫了一個函數,看起來像這樣:我這樣稱呼它

func setImage(imageName: String, completion: ((String) -> Void)?) { 
    UIView.transitionWithView(self.myImageView, duration: 0.3, options: .CurveEaseOut, animations: { 
     self.lockImageView.image = UIImage(named: "\(imageName).png") 
     }, completion: { finished in 
      //execute the completionBlock that was passed 
    }) 
} 

setImage("lockCheck", completion: { finished in 
    print("done") 
}) 

現在,我該如何執行任何已爲完成過去?
在功能方面,在轉型的完成塊,我想是這樣

for x in completion {self.x} 

,但沒有奏效。

感謝提前:)

回答

1

例如,你可以像這樣執行完成處理程序馬上在completionHandler動畫塊:

func setImage(imageName: String, completion: ((Bool) -> Void)?) { 
    UIView.transitionWithView(self.myImageView, duration: 0.3, options: .CurveEaseOut, animations: {() -> Void in 
      self.lockImageView.image = UIImage(named: "\(imageName).png") 
     }, completion: completion) 
} 

您也可以運行帶有額外參數的完成處理喜歡以下(我希望這是很清楚):

func setImage(imageName: String, completion: ((Bool, String) -> Void)?) { 
    UIView.transitionWithView(self.lockImageView, duration: 0.3, options: .CurveEaseOut, animations: {() -> Void in 
     self.lockImageView.image = UIImage(named: "\(imageName).png") 
      }) { (finished) -> Void in 

      // Do some things for example print 
      print("Hi, this is the animation completion handler") 

      // Notice the ? because the completion handler is an optional 
      completion?(finished, "some string") 

    } 
} 
+0

你試過嗎?因爲我得到一個錯誤 – LinusGeffarth

+0

是的,它編譯在這裏,你有什麼版本的Xcode? – Wesley

+0

好吧,我的壞。我在某處讀到它必須是「完成:(字符串)」而不是「(布爾)」,因此它會抱怨。所以修復它,但它並沒有真正回答這個問題。 – LinusGeffarth