使用Optional <t>与ImplicitlyUnwrappedOptional <t>的Swift闭包

时间:2016-11-14 11:27:49

标签: swift closures optional

所以我正在试验Swift选项和隐式解包的选项:

let foo1: Optional<String> = Optional<String>.Some("foo")
let foo2: ImplicitlyUnwrappedOptional<String> = ImplicitlyUnwrappedOptional<String>.Some("foo")
let foo3: ImplicitlyUnwrappedOptional<String> = Optional<String>.Some("foo")
let foo4: Optional<String> = ImplicitlyUnwrappedOptional<String>.Some("foo")

let bar1: (_: Optional<String>) -> () = { (s: Optional<String>) -> () in print(s ?? "nil") }
let bar2: (_: ImplicitlyUnwrappedOptional<String>) -> () = { (s: ImplicitlyUnwrappedOptional<String>) -> () in print(s ?? "nil") }
let bar3: (_: ImplicitlyUnwrappedOptional<String>) -> () = { (s: Optional<String>) -> () in print(s ?? "nil") }
let bar4: (_: Optional<String>) -> () = { (s: ImplicitlyUnwrappedOptional<String>) -> () in print(s ?? "nil") }

foo1,foo2,foo3,foo4,bar1,bar2和bar3编译并正常工作。 bar4抛出编译错误:

  

/Users/TamasZahola/SwiftTest/SwiftTest/main.swift:19:41:无法转换类型的值'(ImplicitlyUnwrappedOptional) - &gt; ()'指定类型'(可选) - &gt; ()'

有人可以解释一下吗?为什么在将(Optional)->()分配给(ImplicitlyUnwrappedOptional)->()时有效,但在相反的情况下却没有?

0 个答案:

没有答案