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

Swift2 在swift中,将变量声明为可选会产生任何额外成本吗?,swift2,Swift2,按照我的老板的说法,若我在init中初始化一个变量,我不应该将它声明为可选的,他认为swift上的书是这样说的 现在我在任何地方都没有遇到过同样的说法,因此我想知道他是否正确 概述: 由于我来自面向对象的目标C编程背景,我的爱好是在我声明变量后立即将其声明为初始值大多数斯坦福大学关于目标C的视频都说了同样的事情现在目标C允许变量为零值,如果我想在swift中将相同的零值作为初始值分配给某个变量,我需要将其声明为可选,我知道,如果我声明了一个变量,而不在init中初始化它,编译器就会出错 stru

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

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

概述:

由于我来自面向对象的目标C编程背景,我的爱好是在我声明变量后立即将其声明为初始值大多数斯坦福大学关于目标C的视频都说了同样的事情现在目标C允许变量为零值,如果我想在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设置为默认值,其中as age定义为Int,并在init中初始化为正确的值

问题:

知道两者都有效

1.如果我声明一个变量为可选变量,然后使用它,这是错误的吗!或即使我在init中初始化它,也要访问它

2.swift规定我不应该使用的是真的吗?或对于变量?如果是,是否会增加计算成本

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


提前感谢。

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

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

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

是的,你的老板是对的,但这取决于要求。如果你确定你会有一个名字和年龄,那么你可以避免选择这两个。如果您不确定这些值,则应使用地址或电话号码等选项,并且最好使用结构中的参数进行初始化,如下所示:

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

如果nil是变量的有效值,则应将变量设置为可选。我不使用swift,但我使用类似的语言,我的投票结果是,默认值为非nil,但如果将该值设置为可选值有意义,则该值应为空。由于该值是在初始化器中为此结构设置的,但名称永远不会为零,因此不应为零optional@dan-配餐室:我同意:我完全同意你的意见:因此我对你的答案投了赞成票,但如果我宣布一个变量为可选变量,那是错误的吗???或者这是一种糟糕的编码实践??有没有我忽略的额外费用。虽然我发布的问题有一些简单的字段,比如name age,但我在网络层设计中使用了类似的方法,比如我的web服务管理器将alamofireManager对象作为可选对象,并在init中初始化它。现在alamofireManager实例在执行过程中的某个时刻可能会得到nil,我不希望它在发生这种情况时崩溃,因此我将其声明为optional,但代码审阅者认为,无论如何,我在init中初始化alamofireManager,所以不需要将其声明为optional,根据他的说法,如果alamofireManager实例为零,则web service manager没有任何用处,因此,如果alamofireManager实例在某个点为零,则应用程序应该崩溃,尽管我觉得接受它确实很奇怪,但这正是根据他的说法,swift book指定,如果我在中初始化它,则不应使用optional初始化。所以我想知道斯威夫特到底是怎么说的??或者如果我做了我所做的是一个错误???要清楚,如果它不是一个可选的,你不能让它为零。隐式展开的可选项仍然是可选项。在我看来,声明一些永远不会有nil值的可选内容是一种糟糕的做法,因为这会给阅读它的人带来错误的期望,而且还需要额外的代码!或者,如果让我们检查一个永远不会发生的条件,那么,如果变量可以变为零,那么使用可选项不再是一个决定,而是一个要求。因此,如何初始化它们是一个风格和方便的问题。如果它们不可能变成零,然后你可能仍然决定让它们成为可选的……但我没有提出任何好的理由来支持这一点。我完全同意你的观点:事实上,斯威夫特说,如果我在init中初始化变量,我就不应该将其声明为可选的,这并没有什么令人不安的,因为我在任何官方书籍中都没有读过这样的内容。现在,尽管我同意将变量声明为可选变量,但会添加额外的代码,如?或或者,如果让我相信我们可以优雅地处理nil条件,如果在任何点变量变为nil,可选变量作为正常变量将导致崩溃。回应:我同意你的观点,所以投票结果是上升的。但我想问的是,可选变量是否会带来成本??为什么我应该尽量避免它们,因为它们可以用于处理零案例等好处
非常感谢。请看我对phillip回答的评论,以清楚地理解我的情况。使用optionals一点也不错,而且不需要任何费用。Swift中的Optionals允许我们在编译时发现潜在问题,从而防止运行时出现意外错误。大多数时候都应该避免使用非可选变量,因为您永远不知道值何时变为nil以及程序何时崩溃。只有您在开发时才知道有100%的价值,如果将来服务发生变化怎么办?如果有人没有向您的类/结构提供值怎么办?在这种情况下,需要重新编码/修改等。这样的情况会出现很多。