你能告诉我何时以及为什么我应该使用关键字static以及什么时候应该使用关键字class? (这是Swift中的Type属性语法)
答案 0 :(得分:3)
定义为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相关的问题:
答案 1 :(得分:0)
您应该查看Apple编写的指南" Swift编程语言"。有关类和结构的页面与您相关。阅读它们并理解这些例子。然后你会知道何时使用结构,何时不使用结构。
这个有用的摘录应该回答你的问题:The Swift Programming Language - Classes and Structures
比较类和结构
Swift中的类和结构有许多共同点。两者都可以:
- 定义存储值的属性
- 定义提供功能的方法
- 使用下标语法定义下标以提供对其值的访问
- 定义初始值设定项以设置其初始状态
- 扩展以扩展其功能,超越默认实现
- 遵守协议以提供某种标准功能
类具有结构不具备的其他功能:
- 继承允许一个类继承另一个类的特性。
- 类型转换使您可以在运行时检查和解释类实例的类型。
- Deinitializers允许类的实例释放它已分配的任何资源。
- 引用计数允许对类实例进行多次引用。
注意:结构总是在你的传递中被复制 代码,不要使用引用计数。