【问题标题】:Calling methods based on variable (SWIFT)基于变量的调用方法 (SWIFT)
【发布时间】:2015-05-05 21:35:09
【问题描述】:

我有许多不同的 Coregraphics 函数绘制出表盘的不同元素。我希望汇总的逻辑根据从当前小时中提取的变量确定显示钟面的哪个方面。所有的绘制方法都列在一个单独的 swift 类/文件中。我如何简化这个过程以将变量注入到调用的方法中,而不是创建这个 if 语句塔?在此您可以看到 drawCanvas04() 与下午 4:00(或 16 小时)相关联。

    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()

}

【问题讨论】:

    标签: ios swift methods


    【解决方案1】:

    使用参数。同时减少类方法,使用实例方法,例如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) 调用它。

    【讨论】:

    • drawrect方法应该放在不同的类中,还是需要和时间计算方法嵌套?我在构建代码以传递小时变量时遇到困难,而不会触发“无法使用'(Int)'类型的参数列表调用'drawCanvas'错误。
    • 另外,我可以使用实例方法 self.drawCanvas 的唯一方法似乎是从 StyleKit 文件中调用它,否则它会请求我使用 ClockStyleKit.drawCanvas()。
    • 再一次,不要使用类方法。您正在使用类方法,这就是为什么您必须这样做ClockStyleKit.drawCanvas()
    • @softdownfeathers 如果您可以将其标记为正确以便其他人可以将其作为解决方案引用它会很棒:-)
    猜你喜欢
    • 1970-01-01
    • 2012-05-05
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2018-11-17
    • 2017-10-24
    • 2018-02-25
    相关资源
    最近更新 更多