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/

相关文章:

将变量传递到排序闭包的快速语法

swift - ARKit中如何获取Camera Position和Image Object Position的角度和距离?

swift - 我正在尝试使用类型为 "Cannot invoke initializer for type "的参数列表连接到变量 '(_)' Int 的侧边器“

python - 为什么这个解压后的简短解释不正确?

ios - 在 Swift 中 if let 赋值中 where 的用法

ios - 使用变量更新 View

c++ - 当某些结构字段被省略或顺序与结构声明中的顺序不同时,如何实现正确的解析?

swift - 使用NSCoding保存结构

swift - 为什么可选常量不会自动具有默认值 nil

swift - 可选展开 SKPhysics 错误