gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 01:16:43 25 4
gpt4 key购买 nike

我在转换/理解 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)'

我曾多次尝试定义 compVar 的 Swift 2.0 等价物,但没有成功……我还阅读了(并随后阅读了)有关 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 {

最佳答案

它是:

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 的 header ,代码补全将向您显示 compVar 的正确配置(无论是否可选)。

关于ios - 将 Obj-C 函数完成处理程序代码转换为 Swift 2.0 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35096465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com