当前位置: 首页 > 面试题库 >

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

谷梁凌
2023-03-14
问题内容

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

让我们以此作为示例类:

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

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

Animate.moveView(...)

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

Animate().moveView(...)

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

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

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

moveView(...)

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

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

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


问题答案:

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

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

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

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

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

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

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



 类似资料:
  • 我正在使用创建一个责任管道链,其中管道中的每个函数都持有对下一个函数的引用。 在构建管道时,我无法通过引用传递内部函数,因为重新分配管道函数会引发StackOverflowException,例如: 我可以用一个结束来解决这个问题: 但是,我想知道,有没有更高效的方法来建立这个函数链,也许是使用表达式?

  • 问题内容: ./chains.go:26:10:不能在作业中使用UpperCaseHandler(typefunc(asl.MessageDelivery))作为asl.MessageHandler类型./chains.go:37:86:无法使用RepeatHandler(类型func(asl.MessageDelivery))与Repeater.ConsumeFunc的参数中的asl.Messa

  • cc.Class 是一个很常用的 API,用于声明 Cocos Creator 中的类,为了方便区分,我们把使用 cc.Class 声明的类叫做 CCClass。 定义 CCClass 调用 cc.Class,传入一个原型对象,在原型对象中以键值对的形式设定所需的类型参数,就能创建出所需要的类。 var Sprite = cc.Class({ name: "sprite" }); 以上代

  • 声明性映射样式是SQLAlchemy使用的主要映射样式。参见章节 声明性映射 对于最高层的介绍。 具有声明性的表配置 声明性表格 访问表和元数据 声明性表配置 具有声明性表的显式架构名称 添加新列 带命令表的声明性(又称混合声明性) 用反射表声明性地映射 使用DeferredReflection 使用自动映射 具有声明性的映射器配置 使用声明性定义映射属性 具有声明性的映射器配置选项 其他声明性映

  • 问题内容: Xcode 8 beta 4不再识别Foundation类。 我在一个简单的操场示例中复制了它: 由于在较早的Xcode 8 Swift 3 Beta中可用,我想这是一个需要修复的错误,而不是Playground中的某些源代码错误? 问题答案: 尽管未在Xcode发行说明中记录,但Swift Foundation中对Swift进化建议SE-0086 Drop NS Prefix 的第2

  • 本文向大家介绍如何使用JSP声明来声明类的对象?,包括了如何使用JSP声明来声明类的对象?的使用技巧和注意事项,需要的朋友参考一下 声明声明了一个或多个变量或方法,您可以稍后在JSP文件中的Java代码中使用它们。在JSP文件中使用变量或方法之前,必须先声明该变量或方法。 以下是JSP声明的语法- 您可以编写与上述语法等效的XML,如下所示- 以下是JSP声明中对象声明的示例-