在 Swift 中使用 where 子句扩展数组类型

2023-12-04

我想使用 Accelerate 框架来扩展 [Float] 和 [Double],但每个都需要不同的实现。

我尝试了显而易见的方法:

extension Array<Float> {
}

并得到这个错误:

“必须在非专用泛型上声明受限扩展 类型“Array”,其约束由“where”子句指定”

是否可以通过这种方式扩展 Swift 2 中的泛型类型?

我现在已经让代码按预期工作了。以下示例展示了使用 Accelerate 框架进行求和。

extension _ArrayType where Generator.Element == Float {

    func quickSum() -> Float {
        var result: Float = 0
        if var x = self as? [Float] {
            vDSP_sve(&x, 1, &result, vDSP_Length(x.count))
        }
        return result
    }
}

extension _ArrayType where Generator.Element == Double {

    func quickSum() -> Double {
        var result: Double = 0
        if var x = self as? [Double] {
            vDSP_sveD(&x, 1, &result, vDSP_Length(x.count))
        }
        return result
    }
}

如果您只想扩展具有特定类型的数组。您应该扩展 _ArrayType 协议。

extension _ArrayType where Generator.Element == Int {

   func doSomething() {
       ... 
   }
}

如果你延长Array您只能确保您的元素符合其他某些协议。 IE:

extension Array where Element: Equatable {

   func doSomething() {
       ... 
   }
}

更新: 使用斯威夫特 3.1 https://github.com/apple/swift/blob/master/CHANGELOG.md

extension Array where Element == Int {

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

在 Swift 中使用 where 子句扩展数组类型 的相关文章

随机推荐

  • R 函数识别不匹配的行

    我正在尝试比较 2 个 data frames V1 代表我的 CRM V2 代表我想要发送的潜在客户 V1 大约有 8k 个元素 V2 大约有 25k 个元素 我需要将 V2 中的每一行与 V1 中的每一行进行比较 丢弃 V1 中存在 V
  • 如何在.Net Framework中将方法注入到自动属性中

    我有一些具有许多属性的 Foo 类 public class Foo public int Property1 get set public int Property2 get set public int Property3 get se
  • 在 Redshift 中拆分行

    在我的表中 数据如下 col1 col2 col3 col4 A1 A2 A3 4 B1 B2 B3 3 C1 C2 C3 1 我需要如下输出 col1 col2 col3 col4 A1 A2 A3 1 A1 A2 A3 2 A1 A2
  • 如何在更多线程上运行 boost asio 解析器服务?

    我在 SNMPV2 实现中使用 boost asio ip udp resolver 来确定主机是否可达 using Resolver boost asio ip udp resolver Resolver resolver ioServi
  • 如何在 Perl 源代码中嵌入中文字符?

    在我的脚本中 我需要将一些汉字 qw 到字符串中 当我运行脚本时 perl 指出脚本中存在无法识别的字符 虽然我知道它一定与编码相关的东西有关 但我不知道如何解决它 所以向你寻求帮助 提前致谢 在 Perl 源代码中嵌入文字字符串很容易 使
  • 如何防止应用程序在完成任务之前关闭?

    我用 C 制作了一个 Windows 控制台应用程序 可以进行一些计算 应用程序窗口对用户来说是不可见的 应用程序作为任务运行 这些计算结果保存到数据库中 不幸的是 如果用户在保存数据期间关闭此应用程序 通过关闭计算机 并且并非所有数据都会
  • 使用 Spark 并行缓存和查询数据集

    我有一个要求 我想缓存一个数据集 然后通过在该数据集上并行触发 N 个查询来计算一些指标 并且所有这些查询都会计算类似的指标 只是过滤器会发生变化 并且我想在其中运行这些查询并行 因为响应时间至关重要 并且我想要缓存的数据集大小始终小于 G
  • 如何创建 100M 字节缓冲区

    我正在测试 Linux 上接口的吞吐量 我正在使用 DMA 进行数据传输 DMA 需要连续的内存位置 但 kmalloc 无法分配超过 1MB 的空间 有没有其他方法可以创建高达 100M 字节的大缓冲区位置 我认为 kmalloc 无法分
  • IBM Worklight 6.0.0.1 - 推送通知轮询在生产环境中不起作用

    我的问题是这样的 When in 开发环境 一切正常 轮询器工作正常 数据库状态发生变化等 When in 生产环境 日志中没有出现任何内容 数据库中也没有任何变化 我正在从数据库表中读取通知 推送通知事件来源 WL Server crea
  • 来自数据库结果的 PHP 多维数组

    我对多维数组有点陌生 想看看我做得是否正确 最好 我想在主数组中命名数组以便于使用 unique array array username gt array user id gt array weeknumber gt array 然后我有
  • 使用 jquery 突出显示选定的文本

    当用户选择 html 页面中的任何文本时 我想添加自定义样式 例如color red 到它 这将充当突出显示工具 类似于您在某些用于阅读 pdf 文件的应用程序中看到的工具 为此我声明highlight 获取所选文本及其位置的函数 func
  • 如何以如下形式创建对象:ifstream in();

    我是 C 初学者 我见过好几次创建对象时 如下所示 class name object name 之后 您可以将 object name 引用为该类的对象 我怎样才能在课堂上做到这一点 我应该重写构造函数吗 以及如何做到这一点 这行代码可能
  • 在模型挂钩后设置控制器属性

    我需要在之后设置一个控制器属性model钩 我可以想到两种方法来做到这一点 model params return this store findRecord user 1 afterModel model transition model
  • Eclipse Maven Spring:当我尝试作为服务器运行时出现服务器错误 (Tomcat 7)

    我有一个 Java 项目 使用春季MVC框架和Maven作为其构建系统 我希望使用的主要 IDE 是用于 Java EE 的 Eclipse 我的应用程序使用标准 Maven 项目结构 源代码位于src main java 应用程序的资源位
  • 将 JSON 发布到 MVC 控制器 - 字符串参数为 null

    我故意尝试不在控制器参数中使用绑定 因此我有一个如下所示的控制器 HttpPost public ActionResult UntypedForm String serializedformdata 当我使用以下代码将序列化的 JSON 表
  • TCP 服务器接收到的数据比预期多

    我有一个服务器客户端应用程序 其中客户端将图像数据流式传输到服务器 我有以下结构 Client private void SerializeAndSendMessage Message msg BinaryFormatter formatt
  • 如何在 SSRS 子报表中填充数据集?

    这看起来应该是微不足道的 但我遇到了困难 我有一个主要报告 我一直在填充数据集 如下所示ReportViewer aspx cs ReportViewer LocalReport ReportPath SummaryReport rdlc
  • 使用 coord_flip 反转分组条形图中条形的顺序

    使用来自的代码here 我意识到了一些我不明白的事情 library ggplot2 LoTRdata lt structure list Film structure c 1L 1L 1L 1L 1L 1L 3L 3L 3L 3L 3L
  • 查找Python包中某些方法和函数的所有用法

    给定一个包含某些模块的Python包 我想找到该包中定义的方法和函数的所有用法 我在想像 pycharms 这样的东西查找用法 其中给定一个函数或方法 它会显示调用该方法 函数的所有行 假设我的包有很多模块 我想查找中定义的函数和方法的用法
  • 在 Swift 中使用 where 子句扩展数组类型

    我想使用 Accelerate 框架来扩展 Float 和 Double 但每个都需要不同的实现 我尝试了显而易见的方法 extension Array