swift - Swift 中的代码重复

标签 swift accelerate-framework

我有一个通用存储类:

class Storage<T> {
  var storage: UnsafeMutablePointer<T>
  var size: Int32

  init(_ size: Int) {
    self.size = Int32(size)
    self.storage = UnsafeMutablePointer<T>.allocate(capacity: size)
  }
}

我想扩展它以使其能够具有不同的数学函数。例如,如果我想为 Float 存储提供正弦函数:

import Accelerate

extension Storage where T == Float {
  // In-place sine function.
  func sin() {
    vvsinf(storage, storage, &size)
  }
}

或者在Double存储的情况下:

import Accelerate

extension Storage where T == Double {
  // In-place sine function.
  func sin() {
    vvsin(storage, storage, &size)
  }
}

这两个实现之间的唯一区别是所用函数的名称(vvsinfvvsin)。如果我们想通过添加更多这样的数学函数来扩展存储,我们将在两个地方复制粘贴每个函数的代码。如果我们还需要支持复制(而不是就地)数学运算,我们需要重复代码的地方数变为 4。

我的问题是:

在 Swift 中是否可以避免上述代码重复? 如果是 C,可以使用宏轻松完成。

最佳答案

从 Swift 4 开始,数字的继承结构更加清晰。在这里查看更详细的信息:https://github.com/apple/swift-evolution/blob/master/proposals/0104-improved-integers.md

就代码而言:

extension Storage where T: Numeric
{
    func sin()
    {
        vvsinf(storage, storage, &size)
    }
}

这将为您涵盖 FloatDoubleIntUInt 和所有其他我'我们可能忘记了。

关于swift - Swift 中的代码重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47200436/

相关文章:

ios - 快速傅立叶变换结果:频率轴刻度?

ios - UINavigationItem BackButton 显示与 UINavigationItem 相同吗?

ios基本图像处理提取红色 channel

ios - 如何隐藏 iOS 图表饼图中的值?

ios - 所有 Controller 上的快速播放器小部件

c - vDSP FFT2d Swift 结果的虚部错误

ios - 如何获得iOS的FFT FFT频率幅度结果?

swift - 线性回归 - Swift 中的加速框架

swift - SpriteKit 构建绳索功能不起作用

ios - XIB - UIView 或 UIControllerView