2015-11-20 3 views
0

Я искал всюду в Интернете, но не мог справиться с ответами, которые я нашел. Поэтому, если кто-то может помочь мне здесь, это будет оценено.Завершение пользовательской функцииHandler для чайников

Я написал функцию, которая выглядит следующим образом:

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

Хорошо, что я плохой. Я где-то читал, что это должно быть «завершение: (String)» вместо '(Bool)', и поэтому он жаловался. Так что это исправлено, но на самом деле он не отвечает на вопрос. – LinusGeffarth