通用映射函数不接受有效的闭包

时间:2016-09-02 17:14:52

标签: swift generics

我在'SquareMatrix< T:HasZeroOne>'中有以下代码数据“数据”存储在[[T]]双数组中的类。我制作了这个映射函数来模仿标准的Swift函数。

public func map<S: HasZeroOne>(transform: (T) -> S) -> SquareMatrix<S> {
    return SquareMatrix(data: data.map{(row: [T]) in row.map({(col: T) in transform(col)})})!
}

起初我尝试了更简单的语法:

public func map<S: HasZeroOne>(transform: (T) -> S) -> SquareMatrix<S> {
    return SquareMatrix(data: data.map{$0.map(transform)})!
}

但在这两种情况下都出现了以下错误:

  

无法转换类型'(T) - &gt;的值S'到预期的参数类型'(_) - &gt; _'

我完全迷失了。我做错了什么?

1 个答案:

答案 0 :(得分:2)

一如既往,我在5分钟后得到答案。并不是说错误信息有帮助。以下作品:

public func map<S: HasZeroOne>(transform: (T) -> S) -> SquareMatrix<S> {
    return SquareMatrix<S>(data: data.map{$0.map(transform)})!
}

请注意<S>

希望有人发现这是一个有用的提示!