Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从init隐式展开可选!()在Swift 3.1中_Swift_Swift3_Initialization_Optional - Fatal编程技术网

从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的结果。对不起,我太激动了,没有注意到你的解释:再次感谢你的帮助!