2015-05-05 96 views
0

我有許多不同的Coregraphics功能繪製出不同的錶盤元素。我期望放在一起的邏輯基於從當前小時拉出的變量來確定顯示鐘錶的哪個方面。所有的繪製方法都在一個單獨的swift類/文件中列出。我怎樣才能簡化這個過程,將一個變量注入到名爲?的方法中,而不是創建這個if語句的塔。在這裏你可以看到drawCanvas04()與下午4點(或16小時)相關聯。基於變量的調用方法(SWIFT)

class ViewController: UIViewController { 

    func updateTime() { 

    var date:NSDate = NSDate() 
    var calendar:NSCalendar = NSCalendar.currentCalendar() 
    var components:NSDateComponents = calendar.components(NSCalendarUnit.CalendarUnitHour | NSCalendarUnit.CalendarUnitMinute | NSCalendarUnit.CalendarUnitSecond, fromDate: date) 
    var hour = components.hour 
    var minute = components.minute 
    var seconds = components.second 

    var time = "\(hour) : \(minute) : \(seconds)" 
    println("\(time)") 


    if hour == 16 || hour == 04 { 

     ClockStyleKit.drawCanvas04() 

    } else { 

     if hour == 17 || hour == 05 { 

     ClockStyleKit.drawCanvas05() 

    } else { 

     if hour == 18 || hour == 06 { 

     ClockStyleKit.drawCanvas06() 

    } else { 

     if hour == 19 || hour == 07 { 

     ClockStyleKit.drawCanvas07() 

    } else { 

     if hour == 20 || hour == 08 { 

     ClockStyleKit.drawCanvas08() 

    } else { 

     if hour == 21 || hour == 09 { 

     ClockStyleKit.drawCanvas09() 

    } else { 

     if hour == 22 || hour == 10 { 

     ClockStyleKit.drawCanvas10() 

    } 

    if hour == 23 || hour == 11 { 

     ClockStyleKit.drawCanvas11() 

    } 

    if hour == 24 || hour = 12 { 

     ClockStyleKit.drawCanvas12() 

    } 

}

這裏是被稱爲stylekit平局方法的一個例子:

public class func drawCanvas07() { 
    //// Color Declarations 
    let color0 = UIColor(red: 0.894, green: 0.000, blue: 0.476, alpha: 1.000) 

    //// HOUR7 Drawing 
    var hOUR7Path = UIBezierPath(ovalInRect: CGRectMake(65.5, 155.99, 24, 24)) 
    color0.setFill() 
    hOUR7Path.fill() 

} 

回答

0

使用的參數。還要減少類方法,使用實例方法,而不是像self.drawCanvas()

像這樣:

func drawCanvas(canvas:Int) { 
    switch canvas { 
     case 0: 
     // do something here for 0 o clock 
     case 1: 
     // 1 o clock 
     // etc, 
     default: 
     // in case somehow you run out of bounds 
    } 
} 

,並使用drawCanvas(10)調用它。

+0

該drawrect方法應該坐在不同的類中,還是需要與時間計算方法嵌套?我很難構建代碼來傳遞小時變量,而不會觸發「Can not invoke'drawCanvas'類型爲'(Int)'錯誤的參數列表。 – softdownfeathers

+0

也似乎是我可以使用實例方法self的唯一方法。 drawCanvas是當我從StyleKit文件調用它的時候,否則它會引起我一個ClockStyleKit.drawCanvas()。 – softdownfeathers

+0

再一次,不要使用類方法,你使用的是類方法,這就是爲什麼你必須做'ClockStyleKit.drawCanvas ()'。 – Schemetrical