swift 中的方法数组,没有引用循环

2024-03-01

我的目标是创建一个包含数组的类。数组的元素将是同一类的方法。喜欢:

class MyClass {
    lazy var functions = [self.myFirstMethod, self.mySecondMethod]

    deinit {
        print("Deinit")
    }

    func myFirstMethod() {
        // Do Something
    }

    func mySecondMethod() {
        // Do Something
    }

    func executeAll() {
        for f in functions {
            f()
        }
    }
}

当我打电话给executeAll()它工作正常,我达到了我的预期结果:

var myObject = MyClass()
myObject.executeAll()

问题是,它创建了引用循环。实例MyClass保存数组functions and functions数组保存self。所以如果我写下面的代码:

var myObject: MyClass? = MyClass()
myObject.executeAll()
myObject = nil

它不会调用deinit方法因为这个强引用循环。 如何将方法指针添加到数组中weak self?我不想使用函数的本地副本executeAll method.


如果方法列表独立于特定实例,那么您可以将其设为类型属性并避免引用循环:

class MyClass {
    static let functions = [myFirstMethod, mySecondMethod]

    func executeAll() {
        for f in MyClass.functions {
            f(self)()
        }
    }

   // ...
}

数组元素是以下类型的“柯里化函数”

(MyClass) -> () -> ()

compare 实例方法是 Swift 中的“柯里化”函数 https://oleb.net/blog/2014/07/swift-instance-methods-curried-functions/.

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

swift 中的方法数组,没有引用循环 的相关文章

随机推荐

  • 尝试实施 Azure Active Directory B2C 时出现 404 错误

    我正在尝试在我正在开发的新页面中实现 Azure Active Directory B2C 但我得到了这个404 File or directory not found尝试从我的页面登录时出错 我创建了租户 注册了我的应用程序 创建了我的政
  • Elasticsearch 使用带有同义词的 shingle 过滤器

    我有以下文件 south africa north africa 我想从以下位置检索我的 南非 文档 s africa a southafrica b safrica c 我定义了以下过滤器和分析器 POST test index sett
  • 非 2xx 状态代码响应是否应包含 CORS 特定标头

    非 2XX 状态代码响应是否仍包含 CORS 特定标头 例如Access Control Allow Origin Access Control Allow Methods and Access Control Max Age 这对客户来说
  • Bootstrap 4 - 如何使固定顶部导航栏在滚动时消失

    使用 Bootstrap 4 如何使固定顶部导航栏在滚动时消失 我在下面附上了默认 Bootstrap 4 导航栏的 html 代码
  • 无法加载 DLL“db2app64.dll”

    我正在写一个 NET框架应用程序并尝试连接到服务器上的 DB2 数据库 尝试时 我收到错误 System DllNotFoundException 无法加载 DLL db2app64 dll 找不到指定的模块 HRESULT 异常 0x80
  • PDF:什么是 DeviceRGB?

    Is this a 自己的色彩空间 例如 Adob eRGB 和 sRGB 或者是这个 b 设备使用的 RGB 色彩空间的名称 如果是 b 应该使用什么颜色空间来渲染 pdf sRGB 是默认使用的吗 pdf 查看器应用程序是否应该能够更改
  • 在 Xcode 7 GM 上启用僵尸对象会导致 _NSZombie_BSXPCMessage 类在两者中实现?和?

    刚刚下载了 XCode 7 GM 并在我的应用程序的 iOS 9 模拟器上尝试一下 但是 我在控制台上收到一条奇怪的消息 objc 2213 Class NSZombie BSXPCMessage is implemented in bot
  • 在 MVC 应用程序中使用 jquery 与 ajax 和 json [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在开发一个 MVC 应用程序 使
  • HTML 验证:为什么将交互元素放入交互元素内无效?

    免责声明 我知道它不是有效的 HTML 我想了解为什么不允许 W3C 建议像这样的交互元素button or a不得包含其他交互元素 我可以找到很多提到此规则和一些解决方法的资源 还有一些与此规则如何影响可访问性和屏幕阅读器相关的资源 但几
  • PHP 日期时间设置时区 2038

    我在项目中使用 DateTime 转换所有日期 从 UTC 到欧洲 维也纳 现在我的日期超过 2038 年 但无法获得正确的时间 示例代码 met new DateTimeZone Europe Vienna utc new DateTim
  • 为什么我无法更改 UILabel 的框架?

    我这两天一直在尝试修改一个框架UILabel 哪个 很荒谬 UILabel是一个 IBOutlet 但这不是原因 为什么它不起作用 我试图创建一个UILabel以编程方式和 它仍然不起作用 我是这样做的 self descriptionLa
  • 即使 Windows 重新启动后,C# AddFontResource 仍无法工作

    我正在尝试使用下面的代码使用 C 代码安装字体 调用InstallFont不会抛出任何异常并返回1 我认为这表明它已经安装了字体 但是 该字体既没有出现在 Windows Fonts 文件夹中的已安装字体列表中 也没有出现在检查 Insta
  • 在 R 中编辑 XML 文件

    我有一个包含以下元素的 xml 文档
  • 在 C 中有效地获取整数向量的绝对值

    任务是将 C 整数数组的每个元素设置为其绝对值 我正在努力尽可能高效地做到这一点 以下是我所做的一系列优化 请告诉我这些是否真的是优化 以及是否可以进行更多优化 该函数的第一个参数将是一个整数数组 第二个参数将是该数组的整数大小 这是标准实
  • Mathematica 中的条件数据操作

    我正在努力准备高效数据分析的最佳工具在数学中 我有大约 300 列和 100 000 行 最好的技巧是什么 删除 提取 或简单地 考虑 数据结构的部分 用于绘制例如 我能想到的最棘手的例子之一是 给定一个数据结构 对于第 2 列中的值等于
  • 将库添加到级联中

    您好 我正在开发一个应用程序来解压 blackberry10 中的文件 为了解压缩文件 我使用从 github 获得的 quazip 库代码 但我不知道如何将此库添加到我的项目中 任何人都可以让我知道如何将库添加到黑莓级联中 要将库添加到
  • Pandas 发送包含数据框作为可视表的电子邮件

    举个例子 df 1 1 2 3 5 df 2 10 20 30 50 df test pd concat pd DataFrame df 1 pd DataFrame df 2 axis 1 我如何通过 gmail 发送电子邮件 并使用此数
  • 值元组从 WebAPI 暴露错误的参数名称

    我正在使用网络 API 我有点懒 决定从我的控制器返回一个值元组 HttpGet Route AuthAPIRoutes GET MFA DEVICES public string Type string Value GetMultiFac
  • 是否可以使用 INNO 脚本移动现有目录/文件?

    我们最近对一个使用 INNO 脚本安装的应用程序进行了重大重组 不幸的是 该应用程序需要某些文件在不同版本之间保持不变 更不幸的是 这些文件的位置在这次重组期间发生了变化 最不幸的是 现在由我来制作一个 INNO 脚本片段 它将查看这些文件
  • swift 中的方法数组,没有引用循环

    我的目标是创建一个包含数组的类 数组的元素将是同一类的方法 喜欢 class MyClass lazy var functions self myFirstMethod self mySecondMethod deinit print De