延迟初始化和 deinit

2024-01-05

我想知道是否有可能在我的视图控制器中使用惰性属性并在deinit方法仅在初始化时才调用我的惰性属性的方法。下面是一些代码:

fileprivate lazy var session: MySession = {
    let session: MySession = MySession()
    session.delegate = self
    return session
}()

deinit {
    session.delete()
}

这样,当session.delete() in the deinit方法被调用并且session尚未使用(所以仍然nil),它被初始化,然后delete叫做。我不想要这个。我想打电话delete除非session之前已经初始化过。

有办法实现这一点吗?我必须放弃惰性初始化的想法吗?


您可以使用私有变量来跟踪会话是否已创建。我认为这个例子做了你想要的(来自操场的代码):

class Thing {
    private var hasMadeSession: Bool = false
    lazy fileprivate var session: Int = {
        self.hasMadeSession = true
        return 1
    }()
    
    deinit {
        print(#function)
        if self.hasMadeSession {
            print("Hello")
        }
    }
}

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

延迟初始化和 deinit 的相关文章

随机推荐

  • 如何确定 Apache Spark Dataframe 中的分区大小

    我一直在使用 SE 上发布的问题的出色答案来确定分区数量以及数据帧中分区的分布需要了解 Spark Dataframe 中的分区详细信息 https stackoverflow com questions 39217964 need to
  • 如何提高申请的主观速度?

    今天 我的同事注意到 当在进度指示器中添加小数位时 会导致程序运行得比没有小数位更快的印象 即不是 1 2 3 而是显示 1 1 2 1 4 1 6 我检查了它 令我惊讶的是我得到了相同的印象 尽管我知道它是伪造的 这让我想知道 还有哪些其
  • 如何使用 javascript 或 jquery 隐藏悬停时的图像路径

    Any one who know the answer please give me the suggestion to do this I am using mozilla firefox browser When i hover the
  • Sails.js - PATH 变量 - sails 命令无法识别

    我在 Windows Server 2008 上 npm 安装 Sails js 后 无法识别 sails 命令 有人可以提示我在 PATH 变量中使用哪些值吗 据我了解 Node exe 运行 sails js 文件 但是 如果我尝试在
  • -DNDEBUG 通常来自哪里?

    我们的构建系统发生了某种变化 优化的构建不再得到 DNDEBUG https gcc gnu org onlinedocs gcc Preprocessor Options html index D 1添加到编译行 我搜索了我们的 make
  • 您正在运行 vue-i18n 的 esm-bundler 版本。建议将您的捆绑程序配置为显式替换功能标志全局变量

    我创建了一个 ionic 应用程序并添加了 vue i18n npx ionic start myapp tabs type vue npm install vue i18n next 我完成了 VueI18n 设置的第一步 并将其添加到
  • 使用子查询的 Oracle 多行更新

    我正在尝试 洗牌 名称表中的last names 值 我想使用子选择查询来随机化名称的顺序并相应地更新它们 我想这样做是出于混淆原因 但希望它仍然看起来像一个真实的数据集 下面的语句返回 ORA 01427 单行子查询返回多于一行 我怎样才
  • 如何处理比较器中的空比较方法参数?

    我已经创建了一个实现Comparator
  • 使用 LoDash 合并包含相同键/值的对象

    在对初始数组中的 LoDash 进行一些操作后 我最终得到以下结果 number 3 product apple number 2 product apple number 4 product pear 我怎样才能操纵它最终得到 numbe
  • 清除数字向上向下

    我的 NumericUpDown 控件问题是 当用户从 NumericUpDown 选择一个值并取消选中 checkBox1 并单击 保存 按钮时 NumericUpDown 的值不会被清除 Public Class FormAdd Pri
  • 将弹出窗口移出屏幕会意外关闭弹出窗口(带有 leaflet.markercluster 的传单)

    我不明白为什么 但每次我打开弹出窗口并且弹出窗口比屏幕大或者我将其锚点移出屏幕时 弹出窗口都会关闭 我现在测试了它 当它发生时leaflet markercluster正在播放 运行这个片段看看我的意思 与传单 markercluster
  • 将字符串转换为 JavaScript 中嵌套对象的属性

    我正在尝试访问一个字符串 key1 key2 作为对象的属性 例如 var obj key1 key2 value1 key3 value2 var attr string key1 key2 变量attr string是嵌套对象中的一串属
  • 具有相同名称和方括号的 jQuery 输入

    我有一个使用 jQuery 和 Ajax 来发布表单数据的表单 但无法让它发送具有相同名称和方括号的输入值 输入看起来像这样并且将具有不同的值
  • 从依赖表中删除数据

    SQL Server 2008 中是否有一个查询会删除所有依赖表中的数据以及所选表中的数据 我很抱歉没有详细说明这个问题 我知道级联删除可以正常工作 但我的应用程序连接到第 3 方 SQL Server 数据库 我有一些单元测试插入到目标表
  • SQL Server 标识规范不连续

    我注意到 SQL Server 2008 Express 在插入自动递增标识规范时会随机向前跳转 例如 我的其中一列 HitStat ID 将依次插入 15 16 17 18 然后突然间 它将决定跳转到 例如 1012 1013 1014
  • Typescript 与 Polymer 1.0?

    我发现这篇很棒的文章我一直在使用 Polymer 0 5 http www mikecann co uk programming tinkering with google polymer and typescript http www m
  • Firefox 中的预加载图像不会在同一页面加载时从缓存中检索

    在某些情况下 我正在网站的主页上运行脚本来交换计时器上的背景图像 我们认为最好尝试实现图像预加载 这会在 Firefox 中提示以下问题 在首页加载时预加载图像不会阻止浏览器再次从原始源而不是缓存加载图像 但奇怪的是 刷新页面会成功地从缓存
  • 如何使用 Flask 和 Flask-login 传递“下一个”URL?

    的文档Flask 登录 https flask login readthedocs org en latest 谈论处理 下一个 URL 这个想法似乎是 用户前往 secret 用户被重定向到登录页面 例如 login 登录成功后 用户将被
  • 将 UIWebView 限制为特定 URL (Swift)

    我正在尝试开发一款 iOS 应用程序 该应用程序在 Swift 中具有 UIWebView 但是我需要它仅适用于一个域 并且在该 UIWebView 中单击的任何外部链接都将在 Safari 中打开 例如 所有链接http example
  • 延迟初始化和 deinit

    我想知道是否有可能在我的视图控制器中使用惰性属性并在deinit方法仅在初始化时才调用我的惰性属性的方法 下面是一些代码 fileprivate lazy var session MySession let session MySessio