【问题标题】:Can you explain me the difference static and class in swift? [duplicate]你能快速解释一下静态和类的区别吗? [复制]
【发布时间】:2017-09-20 01:06:53
【问题描述】:

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

【问题讨论】:

标签: swift properties


【解决方案1】:

定义为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 相关问题:

【讨论】:

    【解决方案2】:

    您应该查看 Apple 编写的“The Swift Programming Language”指南。关于类和结构的页面与您相关。阅读它们并理解示例。然后你就会知道什么时候使用结构体,什么时候不使用结构体。

    这个有用的摘录应该回答你的问题:The Swift Programming Language - Classes and Structures

    比较类和结构

    Swift 中的类和结构有很多共同点。两者都可以:

    • 定义属性以存储值
    • 定义提供功能的方法
    • 定义下标以使用下标语法提供对其值的访问
    • 定义初始化程序以设置其初始状态
    • 进行扩展以将其功能扩展到默认实现之外
    • 符合协议以提供某种标准功能

    类具有结构没有的额外功能:

    • 继承使一个类能够继承另一个类的特征。
    • 类型转换使您能够在运行时检查和解释类实例的类型。
    • 反初始化器使类的实例能够释放它已分配的任何资源。
    • 引用计数允许对一个类实例进行多个引用。

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

    【讨论】:

      猜你喜欢
      • 2012-12-09
      • 1970-01-01
      • 2020-12-23
      • 2016-07-25
      • 2010-09-16
      • 2018-07-23
      • 2011-09-22
      • 2013-03-11
      • 2010-09-12
      相关资源
      最近更新 更多