Swift中的Static func和Class func有什么区别

Swift中的Static func和Class func有什么区别

你将在本文中了解到静态函数和类函数的区别。

很多时候,你可能认为它们是同一件事,但事实并非如此。让我们来了解它们之间的区别。

什么是静态函数?

在Swift中,静态函数是一种与类型而不是与实例相关的函数类型。这意味着实例不需要调用静态函数,因为它可以从类型本身调用。

示例

下面是一个如何在Swift中定义静态函数的例子 –

struct ViewPoint {
   static func defaultOrigin() -> ViewPoint {
      return ViewPoint(x: 0, y: 0)
   }
   var x: Int
   var y: Int
}
let origin = ViewPoint.defaultOrigin()
print(origin)

输出

ViewPoint(x: 0, y: 0)

解释

在上面的例子中,我们创建了一个名为ViewPoint的结构,其中有一些属性,如x和y。在ViewPoint结构中,我们定义了一个名为defaultOrigin()的静态函数来获取默认的原点值。

你可以看到,我们用类型本身调用了defaultOrigin()函数,而没有创建该类型的实例。

什么是类功能?

在Swift中,类函数是一种与类而不是与实例相关的函数。这意味着你可以在类本身上调用类函数,而不是在类的一个实例上。

示例

下面是一个如何在Swift中定义一个类函数的例子–

class ViewPoint {

   class func defaultOrigin() -> ViewPoint {
      return ViewPoint(x: 0, y: 0)
   }

   var x: Int
   var y: Int

   init(x: Int, y: Int) {
      self.x = x
      self.y = y
   }
}
let origin = ViewPoint.defaultOrigin()
print("x: \(origin.x), y: \(origin.y)")

输出

x: 0, y: 0

解释

在上面的例子中,我们创建了一个叫做ViewPoint的类,有一些属性,比如x和y。在ViewPoint类中,我们定义了一个叫做defaultOrigin()的类函数来获取默认原点值。

你可以看到,我们用类型本身调用了defaultOrigin()函数,而没有创建该类型的实例。

为什么我们需要静态或类函数?

每当我们在一个应用程序中编写代码时,我们可能需要包括一些执行实用任务的实用函数。你可以将这些方法定义为静态或类函数,以调用它们而不创建该类型的实例。

它们之间的区别是什么?

  • 静态函数可以与结构体、类或枚举等类型相关联,而类函数只与类类型相关联。

  • 静态函数是用static关键字定义的,而类函数是用class关键字定义的。

  • 类函数可以被子类重写,而静态函数不能被重写。

  • 类函数可以访问类的自我属性,这对于静态函数是不可能的。

示例

下面是一个如何在Swift中覆盖一个类函数的例子–

class ViewPoint {
   class func defaultOrigin() -> ViewPoint {
      return ViewPoint(x: 0, y: 0)
   }
   var x: Int
   var y: Int
   init(x: Int, y: Int) {
      self.x = x
      self.y = y
   }
}
class RectangleView: ViewPoint {
   override class func defaultOrigin() -> ViewPoint {
      return ViewPoint(x: 1, y: 1)
   }
}
let originView = ViewPoint.defaultOrigin()
print("View Origin -> x: \(originView.x), y: \(originView.y)")
let originRectangle = RectangleView.defaultOrigin()
print("Rectangle Origin -> x: \(originRectangle.x), y: \(originRectangle.y)")

输出

View Origin -> x: 0, y: 0
Rectangle Origin -> x: 1, y: 1

解释

在这个例子中。

第1步 – ViewPoint类有一个叫defaultOrigin()的类函数和一个叫staticOrigin()的静态函数,它返回一个X和Y值为0的ViewPoint实例。

第2步 – RectangleView类是ViewPoint的一个子类,它重写了defaultOrigin()类函数,以返回一个x和y值为1的ViewPoint实例。

你可以看到子类RectangleView中被重载的函数staticOrigin()被注释禁用。你可以删除注释并运行这段代码,你会看到一个类似 “error: cannot override static method “的错误。

静态函数和类函数的区别

静态功能 类函数
可以与一个类、结构或枚举相关联。 可以只与类相关联。
由静态关键字定义。 由类关键词定义。
在子类中不能被重载。 可以在子类中被重写。
不能访问自己的属性 可以访问自己的财产

结论

我们可以使用静态或类函数来定义你应用程序中的实用任务。因为它们不依赖于实例,所以可以直接从类型本身调用。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Swift 教程