理解 Swift 中的单例

2023-12-01

我正在尝试在 SWIFT 中创建一个单例,这就是我到目前为止所做的

class Global {

    class var sharedInstance:Global {

        struct singleton {

            static let instance:Global = Global()
        }

        return singleton.instance
    }


}

var a = Global.sharedInstance
var b = Global()

if a === b {

    println("Pointing to Same Instance")
}
else {

    println("Pointing to different instance")
}

我已经使用计算类型属性来创建一个单例(从另一个 stackoverflow 问题中了解到)。到目前为止,输出是“指向不同的实例”。

我正在寻找的是上面示例中的“a”和“b”指向 GLOBAL 类的不同实例,这打破了单例的要点。如何使上例中的“a”和“b”指向该类的同一个实例。

谢谢


这种模式并不保证只有一个实例Global班级。它只允许任何人访问单个公共实例Global通过其sharedinstance财产。

So Global()声明一个新实例Global班级。但Global.sharedinstance不创建新实例Global,只获取预先创建的一个(即在任何人第一次访问它时创建的)。

(如果您更改您的声明b读书var b = Global.sharedinstance你会看到它证实了这一点a and b都指向同一个实例。)

如果您想禁止创建更多实例Global,使其init私人的:

    private init() {  }

但请记住,您仍然可以创建其他Globals从声明它的文件中,所以如果您在游乐场或单文件测试项目中执行上述操作,您将看不到任何效果。

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

理解 Swift 中的单例 的相关文章

  • SwiftUI:发送电子邮件

    在正常情况下UIViewController在 Swift 中 我使用此代码发送邮件 let mailComposeViewController configuredMailComposeViewController mailCompose
  • 从未调用过交互式委托方法

    我想在 ViewController 1 和 NavigationViewController 2 之间进行交互式转换 NavigationController 通过按钮调用 因此呈现时没有交互转换 它可以通过按钮或 UIPanGestur
  • 我的 UICollectionView 无法使用 Swift 平滑滚动

    我有一个CollectionView它使单元出队取决于message类型 例如 文本 图像 我遇到的问题是当我向上 向下滚动时滚动确实很不稳定 因此用户体验不是很好 这仅在第一次加载单元格时发生 之后滚动就会平滑 我有什么想法可以解决这个问
  • 关闭捕获上下文 Swift

    当我尝试更改闭包中的变量时出现此错误 A C function pointer cannot be formed from a closure that captures context 是否有解决方法或者仍然可以更改闭包内的变量 My C
  • 如何在 Swift 2.0 中使用 stringByAddingPercentEncodingWithAllowedCharacters() 作为 URL

    我在 Swift 1 2 中使用过这个 let urlwithPercentEscapes myurlstring stringByAddingPercentEscapesUsingEncoding NSUTF8StringEncoding
  • Swift:本地化字符串数组

    我有一个包含 100 多个字符串的数组 其设置如下所示 有什么方法可以本地化数组中的所有字符串 或者这是设置它的更好方法吗 var listOfThings Cars Mopeds 我建议将字符串放入 plist 文件中 然后可以根据需要本
  • 如何检测在 MapView 中选择了哪个注释

    我在地图内做了一些注释 当我点击它们时 我会看到一些信息 并且有一个打开地图的按钮 并且使用我无法接受的正确信息应该可以绘制出我的路线 这是我的代码 我有 2 个双精度数组用于我的经纬度 我从查询中填充了它们 var lat Double
  • Firebase queryOrderedbyChild 不返回 Null 值

    我有一个根据年龄搜索用户的查询 self ref child users queryOrdered byChild age queryStarting atValue 18 queryEnding atValue 25 observeSin
  • 如何在 RxSwift 中取消订阅 Observable?

    我想在 RxSwift 中取消订阅 Observable 为了做到这一点 我曾经将 Disposable 设置为 nil 但在我看来 更新到 RxSwift 3 0 0 beta 2 后 这个技巧不起作用 我无法取消订阅 Observabl
  • 使用 swift,是否可以访问辅助功能中的反转颜色功能?

    苹果已经在手机中添加了一般 gt 辅助功能 gt 反转颜色的功能 我可以以某种方式在我的程序中使用它 例如当用户触摸屏幕时颜色反转吗 我不知道有什么方法可以自动执行此操作 但您可以使用 UIColor 上的扩展并访问子视图自行反转颜色 ex
  • 更改 macOS 应用程序中打开窗口中的文档

    我正在为 macOS 编写一个基于文档的应用程序 我正在尝试编写一项功能来更改当前窗口中的活动文档 以便能够循环浏览文件夹中的下一个 上一个文档 就像使用图像浏览器应用程序一样 我应该调用什么命令来在当前窗口中打开不同的文档 文档表明 op
  • 图表的集合视图呈现:图表 cocoapods 的“没有可用的图表数据”

    我正在编码GraphViewController包含图形数组的类 类型为LineChartView 但是 当我尝试以集合视图的单元格格式显示这些图形时 使用调用的类GraphCell the LineChartView对象似乎没有加载任何数
  • 等高的 SwiftUI HStack

    我想要Text 111 具有相同的高度VStack包含 2222 和 333 struct Test7 View var body some View HStack alignment top Text 111 Shall have equ
  • GM 发布 Xcode 6 编译

    我刚刚下载了 Xcode 6 的 GM 版本 但无法编译并出现以下错误 Command Applications Xcode app Contents Developer Toolchains XcodeDefault xctoolchai
  • 从 UTC 转换为本地时区给出错误结果

    背景我需要将格式为 HH mm 的时间字符串从 UTC 转换为本地时区 例如 如果 UTC 时间为 09 00 则当地时间 斯德哥尔摩 欧洲 应提前两个小时 Problem当我将 09 00 UTC 转换为斯德哥尔摩 欧洲时间时 我得到 1
  • 在哪里实现 Swift 协议?

    在 Swift 中实现协议一致性时 我有两个选择 具有相同的最终结果 在类中实现协议 也就是说 在类定义的顶部声明一致性 并将实现放在类体内 或者 在扩展中实现协议 也就是说 完全在类之外编写符合协议的代码 这是一个例子 public cl
  • 在其他数组中使用 ForEach 的索引

    为什么我不能使用 FromEach 的索引作为其他数组的索引 这个索引是Int 那么有什么问题呢 var word String return slova selector var symbols Array
  • 使用 UItableviewCell 实现 Google 地图

    我正在尝试在 UItableviewCell 组件内实现谷歌地图 我这样做的方法是在原型单元中定义 GMSMapView 然后使用 dequeueReusableCell 方法配置地图单元 但是 我尝试应用的任何更改都会失败 例如添加标记
  • Swift 相当于 Objective-C FourCharCode 单引号文字(例如 'TEXT')

    我正在尝试在 Swift 中复制一些 Objective C cocoa 一切都很好 直到我遇到以下情况 Set a new type and creator unsigned long type TEXT unsigned long cr
  • Swift 运行时库与 Swift 标准库

    In this 关于如何使用 CocoaPods 的教程 https www raywenderlich com 97014 use cocoapods with swift我无法理解以下段落 与 Objective C 不同 标准 Swi

随机推荐

  • NavigationView Ripple 在支持库中丢失 23.1.0 更新

    使用设计支持库版本23 0 1 内的菜单项NavigationView默认情况下 似乎支持波纹动画当被选择时 但是 当升级到设计支持库版本时23 1 0波纹动画似乎丢失了 这是一个错误吗 有其他人也注意到这一点并且可以复制吗 而且 更好的是
  • Android 将音频文件保存到内部存储中

    目前我已经创建了录音 Android 应用程序 文件保存在外部存储器中 如果我更改方法以使用 MODE PRIVATE 上下文保存为内部存储会怎么样 我已经阅读了 Android 开发人员关于保存文件的内容 但我不知道如何将文件实例转换为字
  • 我可以在 Ruby on Rails 中使用会话/cookie,而无需用户模型或任何身份验证吗? [复制]

    这个问题在这里已经有答案了 我正在 Rails 中创建一个问答游戏 并希望创建一个会话来存储当前用户的数据 以跟踪他们正确回答的问题数量 我搜索过的所有教程都先进行一次登录 然后生成一个会话 如果没有它 我可以做到这一点吗 编辑 实际上我想
  • OCaml 中奇怪的模块加载问题

    我有两个文件 myUnionFind ml and myUnionFind test ml 这两个文件都位于same directory myUnionFind ml open Batteries module type MyUnionFi
  • 使用嵌入式 Solr 服务器现在是否已经过时且不推荐?

    我需要向在 tomcat 上运行的 Java Web 应用程序添加搜索功能 以及同一台计算机上的数据库 由于我计划在同一台机器上使用 Solr 但应该使用哪种实现 我认为嵌入式更可取 因为我需要从同一台机器添加数据 所以通过 HTTP 添加
  • 从 Angular 2 FormGroup 获取所有验证错误

    鉴于此代码 this form this formBuilder group email Validators required EmailValidator isValid hasAcceptedTerms false Validator
  • Windows 批处理脚本复制最近 x 分钟内修改的文件

    我是脚本新手 我想在批处理脚本中复制最近 x 分钟修改的文件 在 Linux 中 有一个简单的命令可以查找并复制 zip最近 x 分钟修改的文件 find user log log mmin 180 type f cut d f 5 xar
  • 如何从非 gui 线程 C# 中创建表单

    我有我的主 GUI 从那里我在一个单独的线程中启动一个长时间运行的方法 现在 我需要在这个单独的线程中创建并显示一个新表单 但是 当我显示这个新表单时 所有控件都卡住了 窗口显示 没有响应 解决这个问题的最佳方法是什么 regards Th
  • 应用程序启动时要添加到主活动的第一个片段

    假设我正在创建一个Android应用程序有一个Navigation drawer和一组fragments 当用户点击其中的一个选项时Navigation drawer相应的fragment已加载 该应用程序只有一个activity Main
  • 有没有办法检测调试器是否附加到 C# 的另一个进程?

    我有一个程序Process Start 另一个程序 N 秒后将其关闭 有时我选择将调试器附加到已启动的程序 在这些情况下 我不希望进程在 N 秒后关闭 我希望主机程序检测是否连接了调试器 因此它可以选择不关闭它 澄清 我不想检测调试器是否附
  • Java ProcessBuilder:环境设置正确,但仍然找不到命令

    我在我正在开发的 Eclipse 插件上使用 Java 的 ProcessBuilder 时遇到问题 我在调用 start 方法之前正确设置了环境 但是当我运行程序时 它总是返回命令未找到错误 当我通过命令行调用该命令时 它工作得很好 当我
  • Apache POI 散点图创建

    Currently generating a scatterplot using POI however the chart comes out weird The topleft one is generated using my cod
  • CKAN 错误:服务器错误 500

    When I visit a page of a CKAN site I get an error Server Error with status 500 我该如何找出问题所在 我如何获得帮助 这个错误可能意味着很多事情 从技术上讲 服务
  • 如何调试 WebKit2GTK+ 扩展

    我正在尝试让 WebKit2GTK 扩展正常工作 这是一个简单的扩展 在创建页面时只会打印到控制台 这是我的项目结构 bin images include lib webextension libwebextension so libweb
  • 检查是否安装了VLC

    我从 C 应用程序调用 vlc 来播放视频 我需要一种方法来持续检查 VLC 是否已安装 我已尝试检查注册表项 但根据您的 Windows 版本或体系结构 它们似乎不一致或不可靠 有人有什么建议 建议吗 我想说你在尝试检测这一点时做了不必要
  • Javascript 点击事件触发两次,即使使用 stopPropagation

    我有一组这样的项目
  • 如何从 Gitlab CD 中的应用程序存储库链接部署脚本/存储库?

    假设您有 Repo A与通用应用程序 Repo B使用 Ansible 部署脚本 在 RepoA CI CD 运行程序中 我想从 Repo B 运行 Ansible 脚本 最好 最简单的方法是什么 我正在尝试的是仅为 RepoB 创建一个额
  • 跨多个 Windows 10 虚拟桌面的持久窗口?

    我有带有多个窗口的 C WPF 程序 我添加了对 Windows 10 桌面的支持 但用户希望在桌面之间移动时某些窗口保留在屏幕上 例如 如果在第一个桌面上打开窗口 A 并且他们翻转到第二个桌面 他们希望窗口 A 保留在新桌面上的相同位置
  • 在javascript中快速合并许多连续的多边形

    有谁知道合并数千个连续多边形的方法 我一直在我的原型中使用 turf 的 union 函数来执行此操作 但随着多边形列表的增加 所需的时间变得太慢 我希望 瞄准一个需要亚第二次的解决方案 我就是这样做的 const turfUnion re
  • 理解 Swift 中的单例

    我正在尝试在 SWIFT 中创建一个单例 这就是我到目前为止所做的 class Global class var sharedInstance Global struct singleton static let instance Glob