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

时间:2016-09-09 15:03:49

标签: swift2

根据我的老板,如果我在init中初始化变量,我不应该将其声明为可选,他认为swift上的书就是这样说的。

现在我还没有在任何地方遇到同样的声明,因此想知道他是否正确。

概述

当我来自面向对象的Objective C编程背景时,一旦我声明它就将变量声明为其初始值是我的爱好(目标C上的大多数斯坦福大学视频说同样的事情)现在客观C用于允许变量的nil值,如果我想将相同的nil值作为初始值赋给swift中的某个变量,我需要将其声明为可选,我知道如果我声明一个变量并且赢了“t = t在init中初始化它我将从编译器中获得错误,

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

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

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

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

问题

知道两者都有效,

1.如果我将变量声明为可选,然后使用,那就错了!要么 ?访问它,即使我在init ??

初始化它

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

我知道这不是一个复杂的问题,我只是想知道我在做什么无论如何都是错的?

提前致谢。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

是的,你的老板是正确的,但这取决于要求。如果您确定自己拥有void mListView_ItemClick(Object Sender, AdapterView.ItemClickEventArgs e) { var item = mItems [e.Position]; Toast.MakeText(Context, item + " Clicked!", ToastLength.Short).Show(); } name,则可以避免age这两项。如果您不确定这些值,那么您应该使用optionals之类的地址或电话号码等。最佳做法是使用optionals中的参数进行初始化,如下所示:

struct