傻瓜式自定义函数的CompletionHandler
问题描述:
我在网上到处搜索,但无法真正处理我找到的答案。所以如果有人可以帮助我,这是值得赞赏的。傻瓜式自定义函数的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}
,但没有奏效。
感谢提前:)
答
例如,你可以像这样执行完成处理程序马上在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")
}
}
你试过吗?因为我得到一个错误 – LinusGeffarth
是的,它编译在这里,你有什么版本的Xcode? – Wesley
好吧,我的坏。我在某处读到它必须是“完成:(字符串)”而不是“(布尔)”,因此它会抱怨。所以修复它,但它并没有真正回答这个问题。 – LinusGeffarth