Swift中的MIN()和MAX()并将Int转换为CGFloat

时间:2014-06-13 09:15:34

标签: ios objective-c swift

我在使用以下方法时遇到了一些错误:

1)对于第一种方法,我如何return screenHeight / cellCountCGFLoat

2)如何在第二种方法中使用等效的ObjC的MIN()和MAX()?

func tableView(tableView: UITableView!, heightForRowAtIndexPath indexPath: NSIndexPath!) -> CGFloat {
    var cellCount = Int(self.tableView.numberOfRowsInSection(indexPath.section))

    return screenHeight / cellCount as CGFloat
}

// #pragma mark - UIScrollViewDelegate

func scrollViewDidScroll(scrollView: UIScrollView) {
    let height = CGFloat(scrollView.bounds.size.height)
    let position = CGFloat(MAX(scrollView.contentOffset.y, 0.0))

    let percent = CGFloat(MIN(position / height, 1.0))
    blurredImageView.alpha = percent
}

4 个答案:

答案 0 :(得分:69)

1:你不能从Int转向CGFloat。您必须使用Int作为输入来初始化CGFloat。

return CGFloat(screenHeight) / CGFloat(cellCount)

2:使用标准库定义的最小和最大函数。它们的定义如下:

func min<T : Comparable>(x: T, y: T, rest: T...) -> T
func max<T : Comparable>(x: T, y: T, rest: T...) -> T

用法如下。

let lower = min(17, 42) // 17
let upper = max(17, 42) // 42

答案 1 :(得分:8)

如果您正在使用Swift 3,现在会在序列(即集合)上调用max()min(),而不是传入参数:

let heights = [5, 6] let max = heights.max() // -> 6 let min = heights.min() // -> 5

答案 2 :(得分:3)

您需要将cellCount显式转换为CGFloat,因为Swift不会在整数和浮点数之间进行自动类型转换:

return screenHeight / CGFloat(cellCount)

minmax函数由标准库定义。

答案 3 :(得分:2)

你可以使用min()和max() - 它们是内置的。

如果你想推出自己的(为什么? - 也许扩展它),你会使用像

这样的东西
func myMin <T : Comparable> (a: T, b: T) -> T {
    if a > b {
        return b
    }
    return a
}