MIN() и MAX() в Swift и преобразование Int в CGFloat

Я получаю некоторые ошибки со следующими методами:

1) Как return screenHeight / cellCount как CGFLoat для первого метода?

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
}

Ответ 1

1: вы не можете перетащить из Int в CGFloat. Вы должны инициализировать CGFloat с помощью Int в качестве входа.

return CGFloat(screenHeight) / CGFloat(cellCount)

2: Используйте функции min и max, определенные стандартной библиотекой. Они определяются следующим образом:

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

Ответ 2

Если вы используете Swift 3, max() и min() теперь вызываются в последовательности (т.е. коллекции) вместо передачи в аргументах:

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

Ответ 3

Вам нужно явно преобразовать cellCount в CGFloat, так как Swift не выполняет автоматическое преобразование типов между целыми числами и поплавками:

return screenHeight / CGFloat(cellCount)

min и max функции определяются стандартной библиотекой.

Ответ 4

Вы можете просто использовать min() и max() - они встроены.

Если вы хотите перевернуть свой собственный (почему? - возможно, продлить его), вы бы использовали что-то вроде

func myMin <T : Comparable> (a: T, b: T) -> T {
    if a > b {
        return b
    }
    return a
}