我是Swift的新手,我遇到了令我困惑的事情。根据{{3}},dataTaskWithRequest方法签名如下:
func dataTaskWithRequest(_ request: NSURLRequest,
completionHandler completionHandler: ((NSData!,
NSURLResponse!,
NSError!) -> Void)?) -> NSURLSessionDataTask
我的问题是,为什么对于completionHandler的NSError参数是一个隐式解包的可选项,当它对该参数完全有效时为零?我本以为它会被声明为NSError?可选的。有什么我想念的吗?
答案 0 :(得分:1)
目前,iOS SDK中存在许多此类不一致的情况。
目前在向Swift过渡期间处于不稳定状态。
请记住,所有这些API都是用Objective C编写的。 还有许多我能想到的其他例子,例如: NSURL等。
随着API的成熟和完善,所有这些东西都变得越来越好,但是从ObjC到Swift的自动转换留下了一些怪癖,就像你提供的上述例子一样。
Apple正在审核每个课程并进行适当的更改以使API现代化,包括对Optionals的最佳实践方法,但他们还没有完成。