2014-06-13 20 views
43

我得到了一些错误,下面的方法:MIN()和MAX()的斯威夫特和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

虽然在下面的评论,你可以只需写入小写或最小值,小写。这就是Swift。 – LightMan

回答

66

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

谢谢,我已经接受了你的答案,因为它很简单,也提供了完整的'min()''max()'函数。如果我只是将MIN()'MAX()'转换为小写,我几乎没有错。 – fuzz

2

你可以使用MIN()和MAX() - 他们是内置。

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

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

你需要明确转换cellCountCGFloat,因为斯威夫特不会自动做类型转换整数和浮点数之间:

return screenHeight/CGFloat(cellCount) 

minmax功能由标准库中定义。

6

如果您在使用雨燕3,max()min()现在呼吁序列(即集合),而不是传递参数:

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