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/

相关文章:

php - 无法从 JSON 响应中获取正确的字符串?

java - 使用 long 将指针从 JNI 传递到 Java

c - struct {0} 和 memset 0 之间有什么区别

swift - Swift 中嵌套可选类型及其数组的推断、静态和动态类型

具有可为空选项字段的 Rust 结构

java - Jackson 序列化 可选,YAML 值为空

uitableview - Swift:如何使用“编辑”按钮删除并停用滑动以删除?

ios - UITextView - 根据 SwiftUI 中的内容调整大小

swift - 如何在 Swift 中找到结构中的最高 Int

c - 将数组打印到文件仅打印第一个元素