2014-06-13 12 views
43

Dostaję jakieś błędy z następujących metod:MIN() i MAX() w Swift i konwersja int do CGFloat

1) Jak mogę return screenHeight/cellCount jako CGFLoat dla pierwszej metody?

2) Jak używać ekwiwalentu MIN() i MAX() OBJC w drugiej metodzie?

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

Choć jest skomentował poniżej, można po prostu napisz min lub max, małymi literami. To wszystko dla Swifta. – LightMan

Odpowiedz

66

1: Nie można spuścić z Int do CGFloat. Musisz zainicjować CGFloat z Int jako wejściem.

return CGFloat(screenHeight)/CGFloat(cellCount) 

2: Użyj funkcji min i max zdefiniowanych przez bibliotekę standardową. Są one zdefiniowane następująco:

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

Sposób użycia jest następujący.

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

Dzięki, zaakceptowałem twoją odpowiedź, ponieważ jest prosta, a także dla zapewnienia pełnej funkcji 'min()' 'max()'. Prawie miałem rację, gdybym właśnie przekształcił 'MIN()' 'MAX()' na małe litery. – fuzz

2

Możesz po prostu użyć min() i maks() - są one wbudowane.

Jeśli chciał toczyć własną rękę (dlaczego? - być może, aby ją przedłużyć) byś użyć czegoś podobnego

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

Trzeba jawnie przekonwertować cellCount do CGFloat, ponieważ Swift nie zrobić automatyczną konwersję typu pomiędzy całkowitymi i pływaków:

return screenHeight/CGFloat(cellCount) 

min i max funkcje są określone przez normę bibliotece.

6

Jeśli używasz Swift 3, max() i min() obecnie nazywa się w kolejności (czyli kolekcja) zamiast przekazując argumenty:

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

Powiązane problemy