当前位置: 首页 > 面试题库 >

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

长孙鸿波
2023-03-14
问题内容

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

我尝试了明显的方法:

extension Array<Float> {
}

并得到这个错误:

“必须在具有’where’子句指定约束的非专用泛型’Array’上声明受约束的扩展”

以这种方式在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,则只能确保您的元素符合其他协议。即:

extension Array where Element: Equatable {

   func doSomething() {
       ... 
   }
}

更新:使用Swift 3.1
https://github.com/apple/swift/blob/master/CHANGELOG.md

extension Array where Element == Int {

   func doSomething() {
       ... 
   }
}


 类似资料:
  • 问题内容: 如何扩展Swift 或带有自定义功能工具的类型? 浏览Swift的API文档可发现Array方法是的扩展,例如: 当复制和粘贴相同的源并尝试任何变体时,例如: 它无法生成并显示以下错误: 标称类型不能扩展 使用完整类型定义失败,即: 并且也无法使用和。 奇怪的是,Swift让我扩展了一个无类型数组: 它让我打电话给: 但是我无法创建适当的泛型类型扩展,因为当类型流过该方法时,该类型似乎

  • 当复制和粘贴相同的源并尝试任何变体时,如: 它无法生成,错误为: 无法扩展标称类型 奇怪的是,Swift让我用以下代码扩展一个非类型化数组: 它让我调用: 但是我不能创建一个合适的泛型类型扩展,因为当类型流经方法时,它似乎丢失了,例如,试图用以下内容替换Swift的内置筛选器:

  • 问题内容: 我希望能够从Nib中提取UIView子类的实例。 我希望能够调用MyCustomView.instantiateFromNib()并具有MyCustomView的实例。我几乎已经准备好通过桥接头文件来移植我拥有的工作中的Objective- C代码,但是我想我会首先尝试惯用的方法。那是两个小时前。 现在是错误的,因为“’是’之后的预期类型”。在那之后我尝试过的内容显示了很多我对Swif

  • 问题内容: 在WHERE子句中有使用SELECT语句描述的名称吗?这是好/不好的做法吗? 这会是更好的选择吗? 它远没有那么优雅,但是运行起来比以前的版本要快。我不喜欢它,因为它在GUI中没有非常清晰地显示(并且SQL初学者需要理解它)。我可以将其分为两个独立的查询,但是随后事情变得混乱了…… 注意:我不仅需要日期和分数(例如姓名) 问题答案: 称为相关子查询。它有它的用途。

  • 本文向大家介绍Swift在开关中使用where语句,包括了Swift在开关中使用where语句的使用技巧和注意事项,需要的朋友参考一下 示例 在语句大小写匹配中可以使用where语句,以添加肯定匹配所需的其他条件。下面的示例不仅检查范围,而且检查数字是否为奇数或偶数:            

  • 问题内容: 我想在Derby数据库中模拟以下类型的查询(即Microsoft SQL Server语法)的效果。目标是返回表中存储在“ someColumn”中的日期少于7天的所有记录。这是我希望实现的Microsoft SQL语法… 我已经能够确定在Derby中它将涉及使用timestampdiff函数。但是我不知道Derby中WHERE子句中函数用法的语法,因此我找不到任何示例。我发现了很多在