如何在 Swift 中声明、创建和使用方法指针?

2023-12-09

我说的不是指向 C 函数的指针,而是指向 Swift 类型中的方法的指针。

struct Test: GeneratorType {
    var methodPointer: mutating () -> Bool?  // Non-working guess
    var which: Bool

    init() {
        which = false
        methodPointer = which ? &testMethod1 : &testMethod2  // Also non-working guess
    }

    //...
}

编译器说“mutating" 作为函数声明的一部分是不合法的。(实际上,它只是建议在那里使用分号。)对于指针初始化(在我删除mutating),编译器认为我正在尝试调用函数并使用它们的结果。我想在这里使用这些方法本身作为对象,而不是作为函数调用。后来我想使用里面的指向方法next;如果不弄清楚这一点,我将不得不求助于枚举标志并手动选择要调用的方法next.

我希望关闭机制的某些部分允许这样做。也许像此页面描述了返回函数的函数。但我见过的例子都没有提到mutating方法。


看看这是否对您有帮助。

class Something {
    var f: ( () -> Int )?
    let f1 = { () -> Int in /* do some action here */ return 1}
    let f2 = { () -> Int in /* do some action here */ return 2}

    func ff(which: Bool) {
        f = which ? f1 : f2
    }

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

如何在 Swift 中声明、创建和使用方法指针? 的相关文章

随机推荐

  • 无效的 Swift 支持/无效的 Swift 实现

    我想上传一个用 swift 编写的应用程序 应用程序加载器成功交付应用程序 但几分钟后我收到苹果的回复 无效的 Swift 支持 该捆绑包包含无效的 Swift 实现 该应用程序可能是使用不合规或预发布的工具构建或签名的 访问develop
  • 如何更新已从 BOT 发送给用户的自适应卡?

    我已经发送了包含捕获详细信息和按钮的卡片 从任务模块单击提交后 该模块将通过 http API 保存详细信息 此处的活动类型为 调用 现在我必须更新现有的自适应卡 我有更新消息的代码 但如何更新卡或再次重新发送卡 connector new
  • Webpack 提供的 Angular 2 应用程序基于环境的属性?

    我正在使用由 JHipster 生成并由 Spring Boot 服务器提供服务的独立 Angular 控制台 我希望根据环境 本地 开发 产品等 提供具有不同属性的应用程序 我看到很多关于配置每个环境的 webpack 构建的帖子 但我需
  • PHP/Regex:bbcode [s] 或 [strike] 的简单正则表达式无法工作

    对于一个愚蠢的 bbcode 解析器 我想将两个定义添加到一个中 我最初的 preg replace 定义是这样的 s s si
  • 无法在 Heroku 上使用 Gmail 发送电子邮件

    我无法让我的 Rails 应用程序使用 Gmail 发送电子邮件 我可以在本地开发环境中发送电子邮件 但无法从 Heroku 发送 这是我的配置文件 应用程序 rb config action mailer smtp settings ad
  • Spark Streaming StreamingContext.start() - 启动接收器时出错 0

    我有一个使用 Spark Streaming 的项目 我使用 spark submit 运行它 但遇到了以下错误 15 01 14 10 34 18 ERROR ReceiverTracker Deregistered receiver f
  • 如何使 Satchmo 在 Google App Engine 中工作

    我知道数据存储方面存在很大差异 但既然 django 是捆绑的并且它从 Satchmo 中抽象出数据存储 那么可以做些什么吗 事实上 我不是 Python 爱好者 到目前为止主要是 Java PHP 但我愿意学习 另外 如果今天不可能 让我
  • 如何将 Node.js 应用程序上传到 FTP 服务器?

    我对 Node js 有点陌生 但我构建了一个应用程序 并对它非常满意 我想知道如何将 Node js 应用程序上传到 FTP 服务器 有可能做到这一点吗 Node JS 应用程序只是文件的集合 您可以像任何其他文件一样使用 FTP 将它们
  • 实体框架代码首先将 TPT 转换为 TPH

    我使用 EF Code First 使用 TPT 开发了一个应用程序 发布附件 评论等 它运行良好 并且正在与许多客户进行 beta 测试 但是 存在许多层次结构 因此 我有一个包含各种继承模型的基本模型 每个模型都包含许多属性 这些属性本
  • HTMLAgilityPack 使用 C# 解析 HTML 时出现问题

    我只是想了解 HTMLAgilityPack 和 XPath 我试图从纳斯达克网站获取 HTML 链接 公司列表 http www nasdaq com quotes nasdaq 100 stocks aspx 我目前有以下代码 Html
  • 使用 jquery 显示/隐藏文本

    基本上我有 6 个按钮和 6 个段落 每个按钮与特定段落相关 我想在单击某个按钮时显示一段文本 然后在再次单击该按钮时隐藏该段落 我浏览过类似的问题 但似乎无法让它发挥作用 我认为这是因为我才开始尝试使用 jquery 并且没有真正理解这个
  • tf.keras 损失变为 NaN

    我正在 tf keras 中编写一个 3 层的神经网络 我的数据集是 MNIST 数据集 我减少了数据集中的示例数量 因此运行时间较短 这是我的代码 import tensorflow as tf from tensorflow keras
  • 在appendChild之后发生的事件

    将元素添加到网页后是否会发生事件 理想情况下我想这样做 var div createSomeDiv div on function console log Div was added document body appendChild di
  • 用 C 扩展 python,返回 numpy 数组给出垃圾

    我正在包装一个 C 文件 以便可以在 python 中使用它 C 函数的输出是一个双精度数组 我希望这是 python 中的一个 numpy 数组 我得到垃圾 这是生成错误的示例 首先是C文件 重点关注最后一个函数定义 其他都应该没问题 i
  • 增加(或减少)R 进程可用的内存

    我想增加 或减少 R 可用的内存量 实现此目的的方法有哪些 From http gking harvard edu zelig docs How do I2 html mirror Windows 用户可能会收到以下错误 R 内存不足 如果
  • 为什么curl 会截断这个查询字符串?

    我确信这个问题的答案将是一些非常明显的字符编码问题 我在命令行上使用curl 来测试python 应用程序中的一些端点 端点采用纬度和经度的 url 参数 没什么特别的 我输入命令 curl v L http localhost 5000
  • 从 HTTP-Request/Response 对象检索 IIS 日志参数值

    我想为我的应用程序编写类似于 IIS 日志的自定义日志 net核心 对于以下字段 我无法从中检索信息HTTP 请求 响应 object 范围 Service Name and Instance Number s sitename User
  • .NET 4 中的混合模式程序集

    大约两年前 我在 NET 2 0 中编写了一个用于数据库访问的类库 并且一直在 NET 2 0 3 0 和 3 5 上使用它 在我正在处理的当前项目 这是一个 NET 4 0 应用程序 中 尝试使用旧的忠实类库 但出现以下异常 System
  • Android:我们如何从 xml 字符串中获取属性值

    谁能告诉我如何解析以下 Xml xml 文件 我得到以下 xml 作为 HttpGet 方法的响应 我可以以字符串形式存储这个 xml
  • 如何在 Swift 中声明、创建和使用方法指针?

    我说的不是指向 C 函数的指针 而是指向 Swift 类型中的方法的指针 struct Test GeneratorType var methodPointer mutating gt Bool Non working guess var