将Obj-C函数完成处理程序代码转换为Swift 2.0时出错

时间:2016-01-30 00:24:22

标签: ios objective-c swift

我无法转换/理解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 {

1 个答案:

答案 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的正确配置(无论是否可选)。