代码之家  ›  专栏  ›  技术社区  ›  Michael

在swift中迭代函数

  •  0
  • Michael  · 技术社区  · 5 年前

    我觉得有点傻…我想消除代码重复,所以我需要迭代一些函数(一些达尔文几何函数)。 但当我尝试

    for function in [Darwin.acos, Darwin.cos, Darwin.sin] { print(function(1.0)) }
    

    我得到一个错误“不明确地使用‘acos’”。我也尝试过 Darwin.acos(Double) 以及“对成员‘acos’的模糊引用” Darwin.acos { $0 } (和类似的)没有任何运气。

    可以这样做吗?谢谢您!

    2 回复  |  直到 5 年前
        1
  •  1
  •   Sulthan    5 年前

    必须在某个位置指定类型:

    let functions: [(Double) -> Double] = [Darwin.acos, Darwin.cos, Darwin.sin]
    for function in functions { print(function(1.0)) }
    

    因为函数是为不同的浮点类型重载的:

    public func acos(_: Float) -> Float
    public func acos(_: Double) -> Double
    public func acos(_: Float80) -> Float80
    
        2
  •  2
  •   Martin R    5 年前

    除了什么 Sulthan said :

    在未来版本的swift中,这些函数也可以作为浮点类型上的静态函数使用,比较 SE-0246 Generic Math(s) Functions :

    let functions = [Double.acos, Double.cos, Double.sin]
    for function in functions { print(function(1.0)) }
    

    您现在可以使用当前的Swift开发人员快照从 https://swift.org/download/#snapshots