根据我的老板,如果我在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是否指定我不应该使用?要么 !对于变量?如果是,是否有任何额外的计算成本呢?
我知道这不是一个复杂的问题,我只是想知道我在做什么无论如何都是错的?
提前致谢。
答案 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