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

Posted

技术标签:

【中文标题】Swift 中的 MIN() 和 MAX() 并将 Int 转换为 CGFloat【英文标题】:MIN() and MAX() in Swift and converting Int to CGFloat 【发布时间】:2014-06-13 09:15:34 【问题描述】:

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

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

【问题讨论】:

虽然下面有注释,你可以只写min或max,小写。这就是 Swift 的全部内容。 【参考方案1】:

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

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

【讨论】:

谢谢,我接受了您的回答,因为它很简单,而且还提供了完整的 min() max() 功能。如果我刚刚将 MIN() MAX() 转换为小写,我几乎是正确的。【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

【参考方案4】:

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

return screenHeight / CGFloat(cellCount)

minmax 函数由标准库定义。

【讨论】:

以上是关于Swift 中的 MIN() 和 MAX() 并将 Int 转换为 CGFloat的主要内容,如果未能解决你的问题,请参考以下文章

swift 3 中 swift 2 的 CGFloat.random(min: CGFloat, max: CGFloat) 是啥?

python中的Max和Min方法,返回不正确的值[重复]

已知从BUF开始存放了10个字类型有符号数据,编程求出这10个数中的最大数和最小数(将最大数存入MAX字单元最小数存入MIN字单元),并将其以10进制数的形式在屏幕上显示出来。

Max-Min和Min-Min算法实现

swift向方法传数组参数的语法

为啥使用 Pandas 的 max 和 min 函数会返回意外结果?