swift - Swift 结构中的非可选值返回可选值

标签 swift struct option-type

<分区>

我在一个 ViewController 中有一个结构,它有几个非可选成员,例如:

struct MyStruct {
    let id: Int64!
    let name: String!
    func checkValues() -> Bool {
        if id == nil || name == nil {
            return false
        } else {
            print("id: \(id) name: \(name)"); return true
        }
    }
}

我在另一个 VC (let temp = ViewController.MyStruct(id: 10, name: "Example")) 中创建了该结构的一个实例,并通过 Segue 将其传递到我创建该结构的那个实例。执行时 temp.checkValues()我明白了

id: Optional(10) name: Optional("Example")

根据我对(非)可选值的理解,我不应该得到 Optional()因为我用 ! 声明了变量.我弄错了吗?现在我只是在每次使用它时都打上感叹号。我也尝试使用 init在结构中,但这并没有改变任何东西。 由于这不是预期的(如果我是对的)我担心我没有得到完整的概念......请告诉我我的代码/我有什么问题。

最佳答案

Did I get it wrong?

是的。您的变量可选项 - ! 运算符是一个强制解包 运算符,因此您的变量是隐式解包。如果您不希望您的变量是可选的,只需删除 !

! 运算符存在于 Swift 中以促进从 Objective-C 的桥接,例如 IBOutlet 变量。除此之外,使用 ! 运算符是一种不好的做法。

关于swift - Swift 结构中的非可选值返回可选值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46076289/

相关文章:

python - Struct.error : argument for 's' must be a bytes object, 已经提供

c - malloc 指针上的偶发段错误

ios - Xcode 8 中的 SceneKit 地板纹理颜色已更改

c - 这个静态分配的结构数据如何在函数外部可用?

ios - 如何忽略容器的安全区域并尊重 Swift UI 中内容的安全区域

swift - 为什么要创建 "Implicitly Unwrapped Optionals",因为这意味着您知道有一个值?

java - 在 Java 1.7 中可选? Gradle 忽略源/目标兼容性?

java - 为什么在访问级别关键字之后指定通用

swift - 如何去除 UISlider 和 Minimum Image 之间的空间

xcode - Swift,Equatable 协议(protocol)错误?