一尘不染

使用类func,使用func和不使用类声明的好处

swift

好的,所以我的项目中有很多辅助函数,而我最初在一个名为Animate的类中具有这些函数。我想知道声明func vc类func有什么好处。

让我们以此作为示例类:

class Animate{
    func moveView(...){
        ...
    }
}

因此,我相信如果我有一个类的功能,我不必照此实例化该类。

Animate.moveView(...)

如果我只是用func声明函数,它将是:

Animate().moveView(...)

但是,如果我根本不将文件声明为类:

func moveView(...){
    ...
}

当我调用该函数时,它只是:

moveView(...)

没有指示代码来自何处,可以在项目中的任何地方这样使用它。

这三种方式的优缺点是什么?这不是宣告课堂不良做法吗?还是有一些非常有用的案例?例如,在我的情况下,我不需要类,因为我只是创建辅助函数而不是对象。

预先感谢您对此有任何见解!


阅读 367

收藏
2020-07-07

共1个答案

一尘不染

好。实例方法vs类方法vs全局方法。

(术语“方法”和“功能”是可互换的。“方法”表示由对象实现的功能,因此,我倾向于将术语“方法”比术语“功能”更喜欢。)

实例方法是由类的实例执行的方法。您必须具有要与之交谈的该类的实例才能调用实例方法。

实例方法可以访问它们所属对象的实例变量,因此该对象可以保存两次调用之间的状态信息。(在网络课程中,您可以创建多个下载对象,每个下载对象管理来自不同URL的不同文件的单个文件下载,并且每个对象可能都有不同的委托,当下载完成时会通知该委托)

类方法由类本身而不是实例调用。这可以使调用辅助函数变得简单,而无需管理对象即可为您完成该工作。由于类方法不与该类的实例通信,因此它们无法为每个对象保留不同的状态信息。例如,您可能有一个实用程序类,该类对字符串执行本地化功能。本地化过程是独立的。您调用一个类函数,并传入一个字符串和您要使其本地化的语言,然后将结果交给您。无需在调用之间保持状态。这样的通话可能看起来像

let frenchString = 
  LocalizationUtils.localizeString("English String", 
    toLanguage: "French")

全局函数不属于任何特定的类。它们对于定义它们的整个模块是全局的。它们与类函数相似,除了它们不特定于特定类。

2020-07-07