【问题标题】:Swift Array.filter methodSwift Array.filter 方法
【发布时间】:2014-09-09 02:41:19
【问题描述】:

Swift的过滤方法定义如下:

func filter(includeElement: (T) -> Bool) -> [T]

为什么 Swift 数组中的过滤器定义在其定义中没有 <T>(即 filter(...))?

【问题讨论】:

标签: arrays filter swift


【解决方案1】:

filterArray<T> 类的一个方法,所以T 是在类级别指定的,不需要在方法中复制它——实际上在方法级别这样做是错误的:

struct Array<T> ... {
    func filter<V>(includeElement: (V) -> Bool) -> [V]
}

因为V 是与T 没有关系的不同类型(除非您在泛型定义中设置约束)。错误地我的意思是TV 是不同的类型,而可以认为它们是相同的。不过,拥有一个带有泛型方法的泛型类是完全合法的。

【讨论】:

    【解决方案2】:

    这是因为这个函数是在 Array struct 的扩展中定义的,而 Array 的定义在其定义中有 : struct Array

    class AA<T> {
    }
    
    extension AA {
        func something(aThing: T) -> T{
            return aThing
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-26
      • 2020-02-05
      相关资源
      最近更新 更多