选择器dataTask(with: completionHandler:)的使用含义不明确

4

我正在尝试获取使用URLRequest对象的dataTask(with:completionHandler:)方法在URLSession中的selector,但因为有两个参数名略有不同的方法(重载方法-一个使用URLRequest对象作为参数,另一个使用URL),所以出现错误:

let dataTaskSelector = #selector(URLSession.dataTask(with: completionHandler:))

我尝试了一种不同的方法,如下所示(在https://github.com/apple/swift-evolution/blob/master/proposals/0022-objc-selectors.md中提到),但仍然出现相同的错误:
let mySelector = #selector((URLSession.dataTask(with: completionHandler:)) as (URLSession) -> (URLRequest, (Data?, URLResponse?, Error?) -> Swift.Void) -> URLSessionDataTask)

在这里输入图片描述

我正在使用最新的Xcode和Swift 3。很不幸,我迄今为止没有找到类似示例的好文档。请帮帮我。

提前感谢您!


1
@vadian,很抱歉告诉您这里的问题不同,我没有找到任何关于如何创建此方法的选择器而不出现此错误的答案。 - Tushar
1
@Sri,这个问题不同。你太快就指出那个链接了。在发布这个问题之前,我已经看过那个链接了。 - Tushar
1
@NiravD,正如您所看到的,我已经重新打开了这个问题。 - vadian
@vadian 感谢您重新打开它。 - Nirav D
也许这个链接对您有帮助: https://dev59.com/k1oU5IYBdhLWcg3wHERo#40542471 - Saumil Shah
显示剩余6条评论
1个回答

4

您可以这样编写选择器

let selector = #selector((URLSession.dataTask(with:completionHandler:)) as (URLSession) -> (URLRequest, @escaping (Data?, URLResponse?, Error?) -> Void) -> URLSessionDataTask)

这个 #selector 教程 帮助我找到了解决方案。


太好了!!!非常感谢Nirav :) 我试着用的语法非常接近你的,但错过了"@escaping"这个单词。 另外,你能否更改语法,使用URLRequest而不是URL来匹配确切的问题。对我来说无所谓.. 我得到了我需要的.. 再次感谢 :) - Tushar
@Tushar 欢迎,我已经编辑了关于 URLRequest 的答案 :) - Nirav D
为了让人们不会错过,您需要将其转换为as ((MyClass) -> (MyMethodType))?而不仅仅是as (MyMethodType) - Tylerc230
@Tylerc230 是的,但这里(MyMethodType)是由逗号分隔的方法参数列表。 - Nirav D
Xcode 11.5 中的错误: 无法将类型为'(URLSession) -> (URL, @escaping (Data?, URLResponse?, Error?) -> Void) -> URLSessionDataTask'的值转换为类型为'(URLSession) -> (URLRequest, @escaping (Data?, URLResponse?, Error?) -> Void) -> URLSessionDataTask'的强制转换中 - rraallvv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接