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)
min
和 max
函数由标准库定义。
【讨论】:
以上是关于Swift 中的 MIN() 和 MAX() 并将 Int 转换为 CGFloat的主要内容,如果未能解决你的问题,请参考以下文章
swift 3 中 swift 2 的 CGFloat.random(min: CGFloat, max: CGFloat) 是啥?
已知从BUF开始存放了10个字类型有符号数据,编程求出这10个数中的最大数和最小数(将最大数存入MAX字单元最小数存入MIN字单元),并将其以10进制数的形式在屏幕上显示出来。