2014-06-13 11 views
43

sto ottenendo alcuni errori con i seguenti metodi:MIN() e MAX() a Swift e la conversione Int a CGFloat

1) Come faccio return screenHeight/cellCount come CGFLoat per il primo metodo?

2) Come utilizzare l'equivalente di MIN() e MAX() di ObjC nel secondo metodo?

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

Anche se è commentata di seguito, è possibile scrivi solo min o max, in minuscolo. Questo è tutto per Swift. – LightMan

risposta

66

1: non è possibile eseguire il downcast da Int a CGFloat. Devi inizializzare un CGFloat con l'Int come input.

return CGFloat(screenHeight)/CGFloat(cellCount) 

2: utilizzare le funzioni min e max definite dalla libreria standard. Sono definiti come segue:

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

L'utilizzo è come segue.

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

Grazie, ho accettato la tua risposta in quanto è semplice e anche per fornire l'intera funzione 'min()' 'max()'. Ho quasi avuto ragione se avessi convertito 'MIN()' 'MAX()' in minuscolo. – fuzz

2

È possibile utilizzare solo min() e max() - sono integrati.

Se si voleva rotolare il proprio (perché? - forse per estenderlo) si può usare qualcosa di simile

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

È necessario convertire esplicitamente cellCount-CGFloat, poiché Swift non fa la conversione di tipo automatico tra interi e carri allegorici:

return screenHeight/CGFloat(cellCount) 

min e max funzioni sono definite dalla libreria standard.

6

Se stai usando Swift 3, max() e min() sono ora chiamati sulla sequenza (ad esempio, la raccolta) invece di passare in argomenti:

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