【发布时间】:2017-09-20 01:06:53
【问题描述】:
你能告诉我什么时候应该使用关键字 static 以及为什么应该使用关键字 class 吗? (这是 Swift 中的类型属性语法)
【问题讨论】:
标签: swift properties
你能告诉我什么时候应该使用关键字 static 以及为什么应该使用关键字 class 吗? (这是 Swift 中的类型属性语法)
【问题讨论】:
标签: swift properties
定义为static func的函数与定义为class func的函数的区别在于static用于结构和枚举的函数,class主要用于协议和类的函数。
类函数也可以被子类覆盖。例如:
class Animal{
class func generateAnimalSound(){
print("Some Animal Sound")
}
static func isAnimal() -> Bool{
return true
}
}
class Cat: Animal{
override class func generateAnimalSound(){
print("Meow!")
}
}
var someAnimal = Animal.generateAnimalSound() // prints "Some Animal Sound"
var cat = Cat.generateAnimalSound() // prints "Meow!"
但是,如果你尝试重写静态成员函数isAnimal(),这将导致错误:
不能覆盖静态方法
这显然是因为静态方法不能被子类覆盖。您应该阅读 Apple 提供的文档和其他 StackOverflow 相关问题:
【讨论】:
您应该查看 Apple 编写的“The Swift Programming Language”指南。关于类和结构的页面与您相关。阅读它们并理解示例。然后你就会知道什么时候使用结构体,什么时候不使用结构体。
这个有用的摘录应该回答你的问题:The Swift Programming Language - Classes and Structures
比较类和结构
Swift 中的类和结构有很多共同点。两者都可以:
- 定义属性以存储值
- 定义提供功能的方法
- 定义下标以使用下标语法提供对其值的访问
- 定义初始化程序以设置其初始状态
- 进行扩展以将其功能扩展到默认实现之外
- 符合协议以提供某种标准功能
类具有结构没有的额外功能:
- 继承使一个类能够继承另一个类的特征。
- 类型转换使您能够在运行时检查和解释类实例的类型。
- 反初始化器使类的实例能够释放它已分配的任何资源。
- 引用计数允许对一个类实例进行多个引用。
注意:结构在传递时总是被复制 代码,不要使用引用计数。
【讨论】: