我无法转换/理解Obj-C完成处理程序的工作方式,以及如何将它们转换为Swift 2.0 ...具体来说,这是代码:
[BLAH aRandomTaskWithURL:NSURL completion:^(NSURL *compVar) {
//do something with compVar
}];
这是我的尝试:
BLAH.aRandomTaskWithURL(myURL,completion: (compVar:NSURL) ) {
print(compVar)
}
以上产生错误"删除compVar:" ...所以我删除它,然后它说"不能用类型'的参数列表调用类型(NSURL)。 (() - >())'
我已经多次尝试定义了Swift 2.0的compVar,但是没有运气......我还读过(并跟着)关于Swift完成变量的相关文档,再次没运气。我错过了什么?
但是,当我添加" Void in"
BLAH.aRandomTaskWithURL(myURL, completion: ) { Void in
//do something
}
没有错误,但我无法访问应该是完成变量的内容。
这是实际的obj-c代码(我之前只想保持一般):
(void)optimalGIFfromURL:(NSURL*)videoURL loopCount:(int)loopCount completion:(void(^)(NSURL *GifURL))completionBlock {
答案 0 :(得分:1)
它是:
BLAH.aRandomTaskWithURL(myURL, completion: { compVar: NSURL in
print(compVar)
})
或者,使用尾随闭包语法:
BLAH.aRandomTaskWithURL(myURL) { compVar: NSURL in
print(compVar)
}
仅供参考,它还取决于NSURL
参数的可空性配置。如果没有指定可空性,那将是:
BLAH.aRandomTaskWithURL(myURL) { compVar: NSURL! in
print(compVar)
}
或者,如果它被明确标记为可为空:
BLAH.aRandomTaskWithURL(myURL) { compVar: NSURL? in
print(compVar)
}
或者,最简单的,您可以让编译器推断出可为空性:
BLAH.aRandomTaskWithURL(myURL) { compVar in
print(compVar)
}
如果您已正确导入aRandomTaskWithURL
的标头,则代码完成将显示compVar
的正确配置(无论是否可选)。