什么时候在Swift中使用静态常量和variables
有一些关于如何在Swift中编写static constant
和static variable
代码。 但是不清楚何时使用static constant
和static variable
而不是constant
和variable
。 有人可以解释吗?
当你定义一个静态的var / let到一个类(或结构)时,这些信息将在所有的实例(或值)之间共享。
共享信息
class Animal { static var nums = 0 init() { Animal.nums += 1 } } let dog = Animal() Animal.nums // 1 let cat = Animal() Animal.nums // 2
正如你在这里所看到的,我创build了2个独立的Animal
实例,但是它们都共享相同的静态variablesnums
。
独生子
通常使用一个静态常量来采用Singleton模式。 在这种情况下,我们希望不超过1个类的实例被分配。 要做到这一点,我们保存在一个常量内的共享实例的引用,我们隐藏初始化。
class Singleton { static let sharedInstance = Singleton() private init() { } func doSomething() { } }
现在当我们需要我们写的Singleton
实例的时候
Singleton.sharedInstance.doSomething() Singleton.sharedInstance.doSomething() Singleton.sharedInstance.doSomething()
这种方法确实允许我们使用总是相同的实例,即使在应用程序的不同点。
有一些关于如何在Swift中编写静态常量和静态variables的代码。 但是不清楚何时使用静态常量和静态variables而不是常量和variables。 有人可以解释吗? 当你将一个静态var / let定义到一个类(或结构体)中时,该值将在所有实例(或值)之间共享。
静态variables/类是variables可以被访问而不需要创build任何实例/对象。
class Human { static let numberOfEyes = 2 //human have only 2 eyes static var eyeDefect = false //whether human have side-effect or not. he can have defect later so its variable //other variables and functions } //you can access numberOfEyes like below no object of Human is created print(Human.numberOfEyes) print(Human.eyeDefect) //Object of Human let john = Human()
我想你知道常数和variables之间的区别。 总之,不变的是,它的价值永不改变。 上面例子中的numberOfEyes和variables是其值的变化; 上例中的eyeDefect。
将静态常量或variables放在内存(RAM)中,然后单独放入对象。 即numberOfEyes有不同的内存空间分配比约翰对象,它不在里面约翰。
现在,何时使用静态常量/variables:
-
当你使用单例devise模式时:static let sharedInstance = APIManager()
class APIManager(){ static let sharedInstance = APIManager() //Your other variables/functions here below } //Use it as to get singleton instance of APIManager from anywhere in your application let instanceOfAPIManager = APIManager.sharedInstance
-
当你需要全局相同的任何东西的值时,不需要在人类中定义types为numberOfEyes的类的实例。
-
由于内存问题,不推荐使用静态variables/常量,因为一旦实例化/分配它,它将一直保留在内存中,直到应用程序从内存中移除。 我发现,直到现在最好的地方使用静态variables/常量只有当做单身模式,有时指针为其他正常variables和常量不使用静态,因为:内存问题,将很难在您的代码中运行unit testing与静态variables/常量。 不build议像人类一样使用。 而是将它们用作常量或variables,并通过实例来访问它们。
class Human { let numberOfEyes = 2 //human have only 2 eyes var eyeDefect = false //whether human have side-effect or not. he can have defect later so its variable //other variables and functions } //you can access numberOfEyes like below if you need just those values. print(Human().numberOfEyes) print(Human().eyeDefect)
静态常量和variables确实属于类本身,而不属于特定的实例。 一个类也可以有静态方法,可以不用创build一个类的实例而被调用。
所以当你有一个带有静态variablesx
的类MyClass
时,你也可以直接通过MyClass.x
来访问它。 x
将在一个类的所有实例中共享