【发布时间】:2020-09-10 04:59:10
【问题描述】:
我有一个接受请求的函数和一个可选的服务器响应回调:
static func getData(request: NSMutableDictionary?, callback: ((Dictionary<String, Any>) -> Void)? ) {
// ...
}
我想为此函数编写一个包装器,其中参数不是可选的。我是这样做的:
static func getData(id: CLong, callback: ((Dictionary<String, Any>) -> Void) ) {
getData(request: ["userId" : id], callback: callback)
}
问题是swift无法将((Dictionary<String, Any>) -> Void)类型转换为((Dictionary<String, Any>) -> Void)?类型。我不知道为什么。毕竟,我们可以成功地将非可选转换为可选:
var a = "hello"
var b: String? = a // correct
为什么 swift 做不到呢?为什么 Swift 认为 Type ((Dictionary<String, Any>) -> Void) 和 Type ((Dictionary<String, Any>) -> Void)? 是完全不同的类型,而不是同一类型的可选变体?
【问题讨论】:
-
规则是可选变量可能为零,非选项变量永远不会为零。在您的情况下,您正在尝试将可选值设置为非可选。因此,每当您的可选值为零时,都会出现异常。迅速避免该异常不让您施放。