【问题标题】:Can a Swift function accept only a range of values?一个 Swift 函数可以只接受一个范围的值吗?
【发布时间】:2017-08-20 05:32:24
【问题描述】:

我想做的是编写一个压缩图像的通用函数。

func compress(image: UIImage, withRatio ratio: CGFloat) -> Data? {
    return UIImageJPEGRepresentation(image, ratio)
}

但这里compress()ratio 可以是任何CGFloat0...∞,但我只想接受0.0...1.0。有没有办法做到这一点?

【问题讨论】:

  • 你想要一个 Swift Range 作为参数还是想要在数组参数中传递开始/结束值(比如创建渐变时可以做什么)?
  • 不,你不能在当前的 Swift 类型系统中表示这样的约束。您可以使用assert 或类似函数进行运行时检查。
  • 你可以使用precondition(0.0...1.0 ~= ratio)

标签: ios swift function swift3 uiimage


【解决方案1】:

由于您的函数已经可以返回nil,您可以在使用之前检查ratio 的值。如果不在你想要的范围内,你可以返回nil

func compress(image: UIImage, withRatio ratio: CGFloat) -> Data? {
    if 0...1 ~= ratio {
        return UIImageJPEGRepresentation(image, ratio)
    } else {
        return nil
    }
}

或者你可以抛出异常:

enum CompressError: Error {
    case ratioOutOfRange
}

func compress(image: UIImage, withRatio ratio: CGFloat) throws -> Data? {
    if 0...1 ~= ratio {
        return UIImageJPEGRepresentation(image, ratio)
    } else {
        throw CompressError.ratioOutOfRange
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    • 2015-12-19
    • 1970-01-01
    相关资源
    最近更新 更多