所以我正在试验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)->()
时有效,但在相反的情况下却没有?