我在试图理解init!()
在Swift中是如何工作的。这是我的测试:
struct InitTest {
var text: String
init!(text: String) {
self.text = text
}
}
let testResult = InitTest(text: "Hello!")
据我所知,testResult应该是
InitTest
(unwrapped)类型,但实际上它仍然是InitTest?
。那么
init!()
与init?()
有何不同? 最佳答案
InitTest(text: "Hello!")
返回隐式展开的可选值,
这是一个可选的,如有必要可以打开包装。例如
无需显式展开即可访问其属性
let string = InitTest(text: "Hello!").text
或者将其传递给接受(非可选)参数的函数:
func foo(_ x: InitTest) { }
foo(InitTest(text: "Hello"))
但是任务
let testResult = InitTest(text: "Hello!")
使
InitTest
成为常规(“强”)选项,请参见SE-0054 Abolish ImplicitlyUnwrappedOptional type和Implicitly unwrapped optional assign in Xcode 8:
如果可以使用强可选类型显式检查表达式,则会。
实际上,我想不出定义
testResult
方法的好理由。