【问题标题】:Accessing a method with multiple paramaters in a Swift extension在 Swift 扩展中访问具有多个参数的方法
【发布时间】:2019-09-15 02:50:25
【问题描述】:

我有一种方法可以将一些值标准化为可用范围(例如,从 123-987 到 0-1)。

我想为此创建一个可重用的 CGFloat 扩展。该方法接受三个参数并根据下面的签名返回一个 CGFloat。如何将其变成 CGFloat 的扩展,以便我可以将结果存储在变量中?

func range(position: CGFloat, min: CGFloat, max: CGFloat) -> CGFloat {
    //
}

一个工作示例如下,但这似乎是错误的做法。

extension CGFloat {
    func range(position: CGFloat, min: CGFloat, max: CGFloat) -> CGFloat {
        //
    }
}
let float: CGFLoat = 0 // This seems needless, but I can't see another way of accessing the method
let result = float.range(position: 200, min: 123, max: 987)

关于如何正确编写这个有什么建议吗?

【问题讨论】:

    标签: swift cgfloat


    【解决方案1】:

    您可以将range 方法设为static,然后将其称为:

    let result = CGFloat.range(position: 200, min: 123, max: 987)
    

    但另一种方法是删除position 参数并使用self

    extension CGFloat {
        func range(min: CGFloat, max: CGFloat) -> CGFloat {
            // ensure self is normalized to the range and return the updated value
        }
    }
    
    let someFloat: CGFloat = 200
    let result = someFloat.range(min: 123, max: 987)
    

    【讨论】:

      【解决方案2】:

      也许你想让你的方法static

      extension CGFloat {
          static func range(position: CGFloat, min: CGFloat, max: CGFloat) -> CGFloat {
              //
          }
      }
      

      然后你可以在CGFloat 上调用它

      let result = CGFloat.range(position: 200, min: 123, max: 987)
      

      【讨论】:

        猜你喜欢
        • 2019-06-06
        • 1970-01-01
        • 2016-02-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-07
        相关资源
        最近更新 更多