将变量声明为可选是否会在 swift 中产生任何额外成本?

Does declaring a variable as optional incurs any additional cost in swift?

按照我老板的说法,如果我在 init 中初始化一个变量,我不应该将它声明为可选的,他认为 swift 上的书是这么说的。

现在我在任何地方都没有遇到过相同的说法,因此想知道他是否正确。

概览:

由于我来自面向对象的 Objective C 编程背景,我的爱好是在我声明变量后立即将其声明为它们的初始值(大多数斯坦福大学视频 Objective C 说了同样的话)现在 objective C 曾经允许变量为 nil 值,如果我想将与初始值相同的 nil 值分配给 swift 中的某个变量,我需要将其声明为可选,我知道如果我声明一个变量但不在 init 中初始化它,我会从编译器中得到错误,

struct TestStruct {
    var name : String? = nil
    var age : Int

    init(){
        name = "Sandeep"
        age = 26
    }

    func printInfo(){
        print(self.name! + "\(self.age)")
    }
} 

在上面的代码中,我将 name 声明为可选,并将 nil 设置为默认值,其中 age 被定义为 Int 并在 init 中初始化为适当的值。

问题

知道两者都有效,

1.Is 如果我将变量声明为可选然后使用 !要么 ?即使我在 init 中初始化它也能访问它??

2.Is swift 指定我不应该使用是真的吗?要么 !对于变量?如果是,是否有任何额外的计算成本?

我知道这不是一个复杂的问题,我只是想知道我做的到底错了吗?

提前致谢。

假设您永远不想将结构的名称重置为 nil,请使用您希望它们具有的值初始化变量。它简化了代码并表达了默认值的想法。

struct TestStruct {
    var name = "Sandeep"
    var age = 26

    func printInfo(){
        print(self.name + "\(self.age)")
    }
}

是的,你的老板是对的,但这取决于要求。如果你确定你会有 nameage 那么你可以避免对这两个 optionals。如果您不确定这些值,那么您应该使用 optionals 之类的地址或 phone 数字等。而且最好的做法是使用 struct 中的参数进行初始化,如下所示:

struct TestStruct {
    var name : String?
    var age : Int

    init(name: String?, age: Int){
        self.name = name
        self.age = age
    }

    func printInfo(){
        //Since your name property is an optional, you should check for a nil before using it.
        print("Name:", (self.name ?? "") + "\nAge: \(self.age)")
    }
}

let myStruct = TestStruct(name: "Sandeep", age: 26)
myStruct.printInfo()

//output
Name: Sandeep
Age: 26

let myStruct2 = TestStruct(name: nil, age: 18)
myStruct2.printInfo()

//output 
Name: No Name provided
Age: 18