2015-02-10 68 views
0

有没有办法让方法成为别名?将Swift方法分配给变量

例如,我有一个课程,用于计算Circle:面积,周长等。数学领域被写为“A”,圆周为“C”,半径为“r”,但是对于普通人和为了清晰的代码,使用全名来进行这样的计算显然是更好的。因此,我想要班级成员“C”和班级成员“周长”做基本相同的事情。

显而易见的方法是将方法分配给一个变量......但调用这种方法并不复杂。下面的代码:

class Circle: parentClass { 
    let π = M_PI 

    ... 

    // here I try to "alias" a method 
    let C = circumference 

    func circumference() -> Double { 
     return 2 * self.radius * π 
    } 
} 

现在调用方法:

let instance = Circle() 

// the line below actually calls instance.circumference 
// but does not look clean enough to be useful 
instance.C(instance)() 

是否有更聪明的方式来做到这一点?

+0

您可以转发呼叫,对吧? 'func c() - > Double {return self.circumference()}'。 – 2015-02-10 08:37:59

+0

是的,但我认为有比旧的包装更优雅的方法。 – Rilakkuma 2015-02-10 08:42:40

回答

2

我不确定这是否更优雅;然而,我确实发现它至少组织良好,并最终形成一个更好的API(使用属性与方法):

struct Circle { 
    let π = 3.14 
    var radius: Double 
    var circumference: Double { return self.π * diameter() } 

    init(radius: Double) { 
    self.radius = radius 
    } 

    func diameter() -> Double { 
    return self.radius * 2 
    } 
} 

extension Circle { 
    var C: Double { return self.circumference } 
} 

let circle = Circle(radius: 60.0) 
let circumference = circle.C 

println("The circumference is: \(circumference)") 
//=> The circumference is: 376.8 
+0

谢谢!扩展是我缺乏使事情变得美丽的Swift知识。 – Rilakkuma 2015-03-12 08:18:47

+0

确实不客气:) – 2015-03-12 17:15:21