Variables 在swift中使用哪种声明

Variables 在swift中使用哪种声明,variables,swift,declaration,Variables,Swift,Declaration,我真的不知道如何在Swift中声明变量,我有四个选项: var value = 0.0 // I know this one declares value as a Double with the number 0.0 var value: Float = 0.0 // This one declares value as a Float with the number 0.0 var value: Float? // I really don't get the difference betw

我真的不知道如何在Swift中声明变量,我有四个选项:

var value = 0.0 // I know this one declares value as a Double with the number 0.0
var value: Float = 0.0 // This one declares value as a Float with the number 0.0
var value: Float? // I really don't get the difference between this
var value: Float! // and this, I just know that both of them are used to declare a variable without a value, am I right ?

我只想声明一个浮点数而不指定一个值,最好的方法是什么?

浮点数?是可选的。
浮动是隐式展开的可选项。有关后者的详细信息,请参见的隐式展开选项部分,其中说明:

[选项]表示允许常数或变量具有“无值”。可以使用if语句检查Optionals以查看值是否存在,并且可以使用可选绑定有条件地展开Optionals以访问optional的值(如果它确实存在)

有时,从程序的结构中可以清楚地看出,在第一次设置该值之后,optional将始终具有一个值。在这些情况下,消除每次访问可选项时检查和打开可选项值的需要是很有用的,因为可以安全地假设它一直都有值

这些类型的选项被定义为隐式展开的选项。通过在要设置为可选的类型后放置感叹号(String!),而不是问号(String?),可以编写隐式展开的可选类型

当一个可选项的值在第一次定义该可选项之后立即被确认存在时,隐式展开的可选项是有用的,并且可以肯定地假设该可选项在此后的每一点上都存在。Swift中隐式展开选项的主要用途是在类初始化期间,如无主引用和隐式展开可选属性中所述

隐式展开的可选值在幕后是正常的可选值,但也可以像非可选值一样使用,而无需在每次访问时展开可选值


您描述了
value
将是一个类属性。如果这是一个总是在
init
方法中设置的
Float
,那么根本不需要将其设置为可选,因此可以使用第二种语法。如果它是一个变量,在任何时候都可能是
nil
或非
nil
,那么您可以将其设置为可选(第三种语法)。但是,如果它是一个不能在
init
中设置的变量,但一旦设置了它,它通常会从该点开始一直有一个值,您可能会倾向于隐式展开可选(您的第四种语法)。

您有更多的选项!在我脑海中,你也可以做:

var value = Float(0)
lazy var value: Float = 1
var value = {0 + 0 as Float}()
等等,等等,不管怎样:我假设这是一个实例变量;你的问题不清楚

让我们先来谈谈期权:你应该(如果可能的话)避免使用期权,除非你处理的是一个值可能明显丢失的情况;例如,您有时只实例化一个视图,或者并不总是设置一个委托。在我看来(以及在比我聪明的人看来;请看github自己的),您应该尽可能少地使用隐式展开选项(
value:Float!
)。我们经常在苹果的API中看到它们,因为这些API是从用Obj-C编写的框架中采用的,Obj-C以不同的方式使用nil。只有在
init
之后才能设置某个对象,并且该对象永远不会为零时,才应该是隐式展开的可选对象;我们最经常看到它的地方是在从故事板加载的视图中,因为这发生在视图控制器初始化之后

对于其他模式:如果不想设置初始值,我认为初始化为零是一个好的、清晰的模式。当然,这比使用可选值要好,除非您非常明确地希望在将来的某个时刻传达该值可能不包含任何值


如果你处理的是比浮点更重的东西(比如一个实例化成本很高的对象),我更喜欢
惰性
模式,因为如果你在赋值之前从不访问这个值,它将永远不会被实例化。目前有一些解决方案(XCode 6.1.1),因此目前最好使用optionals<代码>惰性
在后台使用选项。

所有这些变量都是在SKScene类中声明的,所以我猜没有局部变量?这个函数没有在类的函数中,但在函数的声明之前,在没有变量的情况下,像C++一样如何使用“1.0F”。