为什么NSSession dataTaskWithRequest完成处理程序对error参数使用隐式解包的可选项?

时间:2015-06-12 16:22:28

标签: ios swift

我是Swift的新手,我遇到了令我困惑的事情。根据{{​​3}},dataTaskWithRequest方法签名如下:

func dataTaskWithRequest(_ request: NSURLRequest,
   completionHandler completionHandler: ((NSData!,
                              NSURLResponse!,
                              NSError!) -> Void)?) -> NSURLSessionDataTask

我的问题是,为什么对于completionHandler的NSError参数是一个隐式解包的可选项,当它对该参数完全有效时为零?我本以为它会被声明为NSError?可选的。有什么我想念的吗?

1 个答案:

答案 0 :(得分:1)

目前,iOS SDK中存在许多此类不一致的情况。

目前在向Swift过渡期间处于不稳定状态。

请记住,所有这些API都是用Objective C编写的。 还有许多我能想到的其他例子,例如: NSURL等。

随着API的成熟和完善,所有这些东西都变得越来越好,但是从ObjC到Swift的自动转换留下了一些怪癖,就像你提供的上述例子一样。

Apple正在审核每个课程并进行适当的更改以使API现代化,包括对Optionals的最佳实践方法,但他们还没有完成。