Swift3关于标准函数max的一个错误

问题

最近在看函数式编程这本书,在图表这一章时发现了一个错误,代码如下:

  extension Sequence where Iterator.Element == CGFloat {
    func normalize() -> [CGFloat] {
        let maxVal = self.reduce(0) { max($0, $1) }
        return self.map { $0 / maxVal }
    }
}

错误:

05435F02-968C-4E16-91A7-849FDC1A6257.png

解决方法

原因是在闭包里面编译器自动识别的是本地的函数,没有在标准库中搜寻这个函数,添加一个Swift就可以解决这个问题。详细的可以在stackoverflow中可以看到

stackoverflow:https://stackoverflow.com/questions/39602298/swift-3-0-compiler-error-when-calling-global-func-mintt-t-in-array-or-dicti

BUG:https://bugs.swift.org/browse/SR-2450

extension Sequence where Iterator.Element == CGFloat {
    func normalize() -> [CGFloat] {
        let maxVal = self.reduce(0) { Swift.max($0, $1) }
        return self.map { $0 / maxVal }
    }
}

你可能感兴趣的:(Swift3关于标准函数max的一个错误)