你能解释一下 Swift 中 static 和 class 的区别吗?

14 浏览
0 Comments

你能解释一下 Swift 中 static 和 class 的区别吗?

这个问题已经有答案了:

Swift中static func和class func的区别是什么?

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

admin 更改状态以发布 2023年5月21日
0
0 Comments

您应该查看由Apple编写的关于“Swift编程语言”的指南。关于类和结构的页面与您有关。阅读并理解其中的示例,那么您将知道何时使用结构和何时不使用。

这篇有用的摘录应该能够回答您的问题:Swift编程语言-类和结构

比较类和结构

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

  • 定义属性来存储值
  • 定义方法来提供功能
  • 使用下标语法定义下标来提供访问其值的方式
  • 定义初始化函数来设置它们的初始状态
  • 通过扩展来扩展它们的功能
  • 符合协议以提供某种类型的标准功能

类具有结构不具备的额外能力:

  • 继承使一个类可以继承另一个类的特征。
  • 类型转换使您可以在运行时检查和解释类实例的类型。
  • 析构函数使类的实例释放它分配的任何资源。
  • 引用计数允许对一个类实例进行多个引用。

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

0
0 Comments

static funcclass 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(),这将导致错误:

Cannot override static method

这显然是因为静态方法不能被子类重载。你应该阅读由苹果和其他相关的StackOverflow问题提供的文档:

0