你能解释一下swift中静态和类的区别吗?

时间:2017-04-23 09:54:17

标签: swift properties

你能告诉我何时以及为什么我应该使用关键字static以及什么时候应该使用关键字class? (这是Swift中的Type属性语法)

2 个答案:

答案 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允许类的实例释放它已分配的任何资源。
  •   
  • 引用计数允许对类实例进行多次引用。
  •   
     

注意:结构总是在你的传递中被复制   代码,不要使用引用计数。