Luc*_*tti 85
当您将静态var/let定义到类(或结构)中时,该信息将在所有实例(或值)之间共享.
class Animal {
static var nums = 0
init() {
Animal.nums += 1
}
}
let dog = Animal()
Animal.nums // 1
let cat = Animal()
Animal.nums // 2
Run Code Online (Sandbox Code Playgroud)
正如你在这里看到的,我创建了两个独立的实例,Animal但两者都共享相同的静态变量nums.
通常使用静态常量来采用Singleton模式.在这种情况下,我们希望分配不超过1个类的实例.为此,我们将对共享实例的引用保存在常量中,并隐藏初始化程序.
class Singleton {
static let sharedInstance = Singleton()
private init() { }
func doSomething() { }
}
Run Code Online (Sandbox Code Playgroud)
现在,当我们需要Singleton我们编写的实例时
Singleton.sharedInstance.doSomething()
Singleton.sharedInstance.doSomething()
Singleton.sharedInstance.doSomething()
Run Code Online (Sandbox Code Playgroud)
这种方法确实允许我们使用始终相同的实例,即使在应用程序的不同点.
Dar*_*ari 12
有一些关于如何在Swift中编写静态常量和静态变量代码的帖子.但目前尚不清楚何时使用静态常量和静态变量而不是常量和变量.谁能解释一下?将静态var/let定义为类(或结构)时,该值将在所有实例(或值)之间共享.
静态变量/类是可以访问的变量,无需创建任何实例/对象.
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()
Run Code Online (Sandbox Code Playgroud)
我想你知道常量和变量之间的区别.简而言之,不变的是它的价值永远不变; 上面例子中的numberOfEyes和变量是其值改变的值; 以上示例中的eyeDefect.
静态常量或变量放在内存(RAM)中,然后与对象分开.即numberOfEyes分配的内存空间与John对象不同,不在John内部.
现在,何时使用静态常量/变量:
当你使用单例设计模式时: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
Run Code Online (Sandbox Code Playgroud)当你需要全局相同的任何值时,不需要创建类的实例,就像人类中的numberOfEyes一样.
由于内存问题,不建议使用静态变量/常量,因为一旦实例化/分配,它将保留在内存中,直到您的应用程序从内存中删除.我发现到目前为止使用静态变量/常量的最佳位置只是在制作单例模式时,有时指针用于其他正常变量和常量不使用静态因为:内存问题,在代码中运行单元测试将很困难使用静态变量/常量.不建议像Human类一样使用.而是将它们用作常量或变量,并通过制作实例来访问它们.
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)
Run Code Online (Sandbox Code Playgroud)小智 8
静态常量和变量确实属于类本身,而不属于特定实例。类也可以有静态方法,无需创建类的实例即可调用这些方法。
所以当你有一个MyClass带有静态 var的类时x,你也可以MyClass.x直接访问它。x将在一个类的所有实例之间共享
| 归档时间: |
|
| 查看次数: |
41278 次 |
| 最近记录: |