全局 var 与共享实例 swift

2023-11-27

Swift 中的全局变量和共享实例有什么区别?它们各自的使用领域是什么?任何人都可以根据 Swift 澄清他们的概念吗?


全局变量是在文件顶层声明的变量。所以如果我们有一个名为Bar,您可以存储对实例的引用Bar在这样的全局变量中:

var bar = Bar()

然后您就可以从任何地方访问该实例,如下所示:

bar
bar.foo()

共享实例或单例如下所示:

class Bar {
    static var shared = Bar()
    private init() {}
    func foo() {}
}

然后,您仍然可以从模块中的任何位置访问共享实例,如下所示:

Bar.shared
Bar.shared.foo()

然而,两者之间最重要的区别之一(除了通常不鼓励使用全局变量这一事实之外)是单例模式限制您创建其他实例Bar。在第一个示例中,您可以创建更多全局变量:

var bar2 = Bar()
var bar3 = Bar()

然而,使用单例(共享实例),初始化器是私有的,所以尝试这样做......

var baaar = Bar()

...结果如下:

由于“私有”保护级别,“Bar”初始值设定项无法访问

这是一件好事,因为单例的要点是有一个single共享实例。现在,您可以访问实例的唯一方法Bar是通过Bar.shared。重要的是要记住添加private init()在类中,但不要添加任何其他初始化程序,否则将不再强制执行。

如果您想了解更多相关信息,请参阅 KrakenDev 撰写的一篇很棒的文章here.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

全局 var 与共享实例 swift 的相关文章

随机推荐

  • 如何在 read() 函数调用中实现超时?

    我想使用串行com端口进行通信 并且我想在每次调用时实现超时read 函数调用 int filedesc open dev ttyS0 O RDWR read filedesc buff len EDIT 我使用的是 Linux 操作系统
  • MATLAB:如何在 parfor 中设置随机种子以产生与 Serial for 相同的结果?

    我设置了以下最小示例 rng 0 randseedoffset random unid 10 5 1 t cell 10 1 for i 1 10 rng randseedoffset i t i random unid 1000 end
  • XML::LibXML 中实现了哪个版本的 XPath?

    有谁知道 XML LibMXL 中实现了哪个版本的 XPath 规范 或者更重要的是 在哪里可以找到可在 LibXML 中使用的 XPath 函数的描述 例如 我尝试过类似的东西 dcDOM gt findvalue dc identifi
  • C 有标准的 ABI 吗?

    来自讨论别的地方 C 没有标准的ABI 应用程序二进制接口 但C也没有 对吗 在任何给定的平台上它几乎都是如此 如果缺乏一种语言 它就无法作为跨语言交流的通用语言 您对此有何看法 C 没有定义 ABI 事实上 它竭尽全力避免定义 ABI 像
  • 如何在sklearn中对分类变量进行编码?

    我正在尝试使用 UCI 存储库中的汽车评估数据集 我想知道是否有一种便捷的方法可以在 sklearn 中对分类变量进行二值化 一种方法是使用 LabelBinarizer 的 DictVectorizer 但在这里我得到了 k 个不同的特征
  • 使用 HBase 进行行分页

    有没有办法在HBase中基于rowkey进行分页 我想要和我一样的效果SQL with SELECT FROM table LIMIT 10 OFFSET 10 如果这是不可能的 我应该如何最好地设计我的行键以进行适当的查询 您可以利用页面
  • 重新分配一次性对象变量是如何工作的?

    在 C 中 当用新对象重新分配一次性对象变量时 它在内存中如何工作 旧对象占用的内存空间会被新对象覆盖吗 或者我还需要打电话吗Dispose 释放它使用的资源 DisposableThing thing thing new Disposab
  • LINQ to Entities Union 引发错误

    我已经成功地完成了以下工作 var transactions from t in context Transactions group t Create Date Time by t Participation Id into t1 sel
  • 如何将类型应用于 NSFetchRequest 实例?

    在 Swift 2 中 以下代码有效 let request NSFetchRequest entityName String 但在 Swift 3 中它给出了错误 无法推断通用参数 ResultType because NSFetchRe
  • 具有默认参数的成员函数指针

    我正在尝试创建一个指向具有默认参数的成员函数的指针 当我通过此函数指针调用时 我不想为默认参数指定参数 根据标准 这是不允许的 但我以前从未发现过任何标准不允许的事情 而我却无法以其他符合标准的方式做到这一点 到目前为止 我还没有找到一种方
  • R 中的简单 if-else 循环

    有人能告诉我 R 中的 if else 循环有什么问题吗 我经常无法让 if else 循环工作 我收到错误 if match SubjResponse names data NA observed lt data SubjResponse
  • 在 C# 中将 4 字节数组转换为浮点数时出现问题

    我正在使用 C 并从某个控制器读取字节数组并将它们转换为其类型 除浮点值外 所有值 int string 都可以 假设得到的值为 533174 1 但是当读取数组时 byteArr 0 2 byteArr 1 73 byteArr 2 98
  • lambda 是否会在内存中保留任何数据?

    我在 AWS lambda 中有以下代码 const cache exports handler async event gt TODO implement if cache event key console log read from
  • 为什么这有效? (在C++中查找奇数)

    for unsigned int i 1 i lt 100 i if i 0x00000001 std cout lt lt i lt lt 为什么 以及如何 if i 0x00000001 找出奇数 0x00000001 is 1尽管它是
  • 无法加载 AppCompat ActionBar,出现未知错误?

    构建 gradle 文件 apply plugin com android application android compileSdkVersion 28 defaultConfig applicationId io dume dume
  • 在 PostgreSQL 中动态生成交叉表列

    我正在尝试创建crosstabPostgreSQL 中的查询 使其自动生成crosstab列而不是对其进行硬编码 我编写了一个函数 可以动态生成我需要的列列表crosstab询问 这个想法是将这个函数的结果替换为crosstab使用动态sq
  • 解析Java源代码

    我被要求开发一个软件 它应该能够创建输入Java源代码的流程图 控制流 于是我开始研究并得出以下解决方案 要创建流程图 控制流 我必须识别给定源代码中的控制语句和函数调用现在我有两种识别方法 通过编写我自己的语法来解析源代码 我认为这是一个
  • 如何从外部软件调用证明助手Coq

    如何从外部软件调用证明助手Coq Coq 有一些 API 吗 Coq 命令行界面是否足够丰富 可以在文件中传递参数并在文件中接收响应 我对 Java 或 C 桥感兴趣 这是合理的问题 Coq 并不是一种常见的商业软件 人们可以从中获得开发人
  • 如何将匿名类型作为参数传递?

    如何将匿名类型作为参数传递给其他函数 考虑这个例子 var query from employee in employees select new Name employee Name Id employee Id LogEmployees
  • 全局 var 与共享实例 swift

    Swift 中的全局变量和共享实例有什么区别 它们各自的使用领域是什么 任何人都可以根据 Swift 澄清他们的概念吗 全局变量是在文件顶层声明的变量 所以如果我们有一个名为Bar 您可以存储对实例的引用Bar在这样的全局变量中 var b