swift - 重写 func +( [ Double ], [ Double ] )

标签 swift foundation

我想像下面这样定义 [ Double ]+ function

[ 2.0, 3.0, 4.0 ] + [ 5.0, 6.0, 7.0 ] -> [ 7.0, 9.0, 11.0 ]

所以,我定义了 + function,如下所示。

func +( _ l: [ Double ], _ r: [ Double ] ) -> [ Double ] {
    guard l.count == r.count else { fatalError() }
    var v = [ Double ]( repeating: 0, count: l.count )

    // Some adding operation

    return v
}

除非没有 Foundation 框架,否则它可以工作。

但是当我包含 Foundation 框架时,似乎在 Foundation 框架中 +( Array, Array ) 已经被定义了。所以,

[ 2.0, 3.0, 4.0 ] + [ 5.0, 6.0, 7.0 ]

得到

[ 2.0, 3.0, 4.0, 5.0, 6.0, 7.0 ]

有谁知道如何避免这种情况?或者与 Foundation framework 一起覆盖 +([ Double ],[ Double ]) 是不可能的吗?

最佳答案

作为两个Array 操作数的+ 已经是reserved for concatenating arrays ,您必须求助于声明自己的 infix 运算符。例如。 ~+:

import Accelerate

infix operator ~+

func ~+( _ l: [ Double ], _ r: [ Double ] ) -> [ Double ] {
    guard l.count == r.count else { fatalError() }
    var v = [ Double ]( repeating: 0, count: l.count )
    vDSP_vaddD( l, 1, r, 1, &v, 1, vDSP_Length( v.count ) )
    return v
}

print([ 2.0, 3.0, 4.0 ] ~+ [ 5.0, 6.0, 7.0 ]) // [7.0, 9.0, 11.0]

关于swift - 重写 func +( [ Double ], [ Double ] ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51711718/

相关文章:

ios 辅助功能焦点被困在状态栏上

ios - 使用 Swift 3 将图像转换为 Base64 时出现问题

ios - 在我的项目中安装 LayerKit 时出现问题

ios - 如何从 Progress 对象中删除一个 child ?

ios - 在 Core Data 中存储 NSURL 的正确方法是什么?

arrays - 从 NSUserDefaults 检索数组后出现错误

iphone - 获取方案的默认端口?

ios - 如何使用主视图的选定单元格内容设置详细 View 的表格 View 的最顶层单元格(第一行)?

ios - 是否应该为 Swift 类添加前缀以避免潜在的 Objective-C 兼容性冲突问题

ios - 在 Apple 的 Foundation/Swift/Objective-C 中,runLoop.run 如何阻塞,但仍允许 DispatchWorkItems 处理?