解释 Swift 中函数和方法之间的区别

swiftserver side programmingprogramming

作为 iOS 开发人员,了解 Swift 语言中函数和方法之间的区别至关重要。

您可能很难理解函数和方法之间的区别,但您可能认为它们是一样的。事实并非如此。它们之间存在一些差异。让我们在本文中了解它。

  • 在 Swift 语言中,方法仅用于类、结构和枚举。而函数是独立定义的。基本上,您可以在代码中的任何位置创建函数,而无需创建类或结构。

  • 简单地说,我们可以说每个方法都是一个函数,而每个函数都不是方法。

函数有什么用?

基本上,函数用于执行特定操作并通过其名称调用。调用函数时将变量或常量作为参数传递非常简单。此外,我们可以从任何类型的函数返回值。独立于文件工作的函数也可以在文件外部定义。

语法

func functionName(parameters...) -> returnType {
    // 在此处写入语句以执行操作
}

示例

func performTaskAfter(_ seconds: Double, completionHandler: @escaping () -> ()?) {
    // 在给定延迟后执行异步操作
    // .now() + seconds:在当前时间中添加给定的秒数
    DispatchQueue.main.asyncAfter(deadline: .now() + seconds) {
        completionHandler?()
    }
}

解释

在上面的示例中,我们定义了一个名为 performTaskAfter 的函数,用于在给定的秒数延迟后执行任务。此函数可以在代码中的任何位置定义,您可以从代码中的任何位置调用它。

方法做什么?

我们知道每个方法都是一个函数,可以在类、结构和枚举中定义。使用方法,我们可以根据您的要求执行某些操作。根据您的需要,您可以定义多个方法来执行不同的任务。

现在,您必须创建一个对象来访问类或结构中定义的方法。使用该对象,您可以调用方法来执行任务。您可以在调用方法时传递参数。您应该注意,如果不创建该类或结构的对象,则无法访问这些方法。

在 Swift 语言中,有两种类型的方法,如下所示 -

  • 实例方法 - 根据它们的名称,这些是可以通过实例调用的实例特定方法。如果您尝试在没有该类或结构的实例的情况下访问方法,编译器将给您一个错误。此外,您无法从另一个类的实例调用一个类的方法(例如 Class Student)。

  • 类型方法 − 在 Swift 中,您可以使用 static 或 class 等前缀关键字定义类型方法。无需创建类或结构的实例来调用类型方法。可以直接从类型名称调用它们。

示例

struct Student {
    
   let name: String
   let grade: Int
    
   // 实例方法
   func displayInfo() {
      print("name: \(name)")
      print("grade: \(grade)")
   }
    
   // 类型方法
   static func dummyStudents() -> [Student] {
      return [Student(name: "Ray Sin", grade: 4),
         Student(name: "Cherry Blossom", grade: 2),
         Student(name: "Perry Scope", grade: 7)]
   }
}
let anne = Student(name: "Anne Teak", grade: 5)
// 从对象 anne 调用实例方法
anne.displayInfo()

// 调用类型方法
let students = Student.dummyStudents()
print("number of students: ", students.count)

输出

name: Anne Teak
grade: 5
number of students:  3

解释

在上面的例子中,我们创建了两个不同的方法:即 displayInfo() 和 dummyStudents()。我们可以看到,第一个方法是通过实例访问的实例方法,而第二个方法由 Student 类本身调用。

Swift 中函数和方法之间的视觉识别

Swift 语言展示了如何表示函数和方法。很明显,两者都表示如下:

  • 函数的图标为ƒ

  • 方法的图标为M

总结 Swift 中的函数和方法
函数 方法
函数定义为独立的。这样,我们可以在类之外定义函数。 它们与类或结构本身相连。在范围之外,您无法定义方法。
函数是结构化语言(如 C/C++)的独立属性。 方法在对象范围内工作,类似于面向对象语言(如 C#、Java、Swift 等)。
函数不捕获任何引用变量或常量。 仅使用引用变量(或实例)调用方法。
虽然函数不属于类,但它们单独执行。 定义方法是为了操作该类或结构的特定实例。
无需创建对象即可调用它们。 需要对象才能访问它们。
简单地说,不是每个函数都是方法。 而每个方法都是函数。

结论

Swift 提供了用于不同目的的函数和方法。本文解释了它们之间的区别,尽管您可能认为它们是一样的。


相关文章