从init隐式展开可选!()在Swift 3.1中
我试图理解从init隐式展开可选!()在Swift 3.1中,swift,swift3,initialization,optional,Swift,Swift3,Initialization,Optional,我试图理解init是如何实现的!()在Swift中工作。这是我的测试: struct InitTest { var text: String init!(text: String) { self.text = text } } let testResult = InitTest(text: "Hello!") 据我所知,testResult应该是InitTest(unwrapped)类型,但实际上仍然是InitTest? init怎么样!()不同于in
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(文本:“Hello!”)
返回隐式展开的可选,
这是一个可选选项,如有必要,可将其展开。例如
无需显式展开即可访问其属性
let string = InitTest(text: "Hello!").text
或者将其传递给使用(非可选)InitTest
参数的函数:
func foo(_ x: InitTest) { }
foo(InitTest(text: "Hello"))
但是任务
let testResult = InitTest(text: "Hello!")
将testResult
设为常规(“强”)可选,请参阅
以及:
如果可以使用强可选类型显式检查表达式的类型,则它将是
实际上,我想不出一个好的理由来定义
init!()
方法。让text=InitTest(text:“Hello!”)。text
按预期工作,但让testResult=InitTest(text:“Hello!”);让text=testResult.text
生成错误:可选类型“InitTest”的值未展开;你想用“!”吗或“?”?
。为什么testResult
仍然是可选的InitTest
?@RoboRobok:这就是我试图在“但是赋值……使testResult成为常规(“强”)可选的”一节中解释的内容,并且是可选的。这是SE-0054的结果。对不起,我太激动了,没有注意到你的解释:再次感谢你的帮助!