gpt4 book ai didi

swift - 在 Swift 3.1 中从 init!() 隐式解包可选

转载 作者:行者123 更新时间:2023-11-28 06:16:28 25 4
gpt4 key购买 nike

我想了解 init!() 在 Swift 中是如何工作的。这是我的测试:

struct InitTest {
var text: String
init!(text: String) {
self.text = text
}
}

let testResult = InitTest(text: "Hello!")

根据我的理解,testResult 应该是 InitTest 类型(展开),但它实际上仍然是 InitTest?

init!()init?() 有何不同?

最佳答案

InitTest(text: "Hello!") 返回一个隐式展开的可选,这是一个可选的,如果需要,它会被解包。 例如您无需显式展开即可访问其属性

let string = InitTest(text: "Hello!").text

或将其传递给采用(非可选)InitTest 参数的函数:

func foo(_ x: InitTest) { }
foo(InitTest(text: "Hello"))

但是作业

let testResult = InitTest(text: "Hello!")

使 testResult 成为常规(“strong”)可选,请参阅 SE-0054 Abolish ImplicitlyUnwrappedOptional typeImplicitly unwrapped optional assign in Xcode 8 :

If the expression can be explicitly type checked with a strong optional type, it will be.

实际上,我想不出定义 init!() 方法的好理由。

关于swift - 在 Swift 3.1 中从 init!() 隐式解包可选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44986286/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com