我想在初始化程序中调用函数,但我无法执行此操作
class someclass {
var a : Int
var b : Int
init() {
self.a = 5
self.b = 4
func printx () {
println("you called the function")
}
printx()
}
}
var ab = someclass()
是否可以做像ab.init()。printx这样的事情 和 当我用someclass()
初始化时,这个printx()函数会执行吗?答案 0 :(得分:1)
这个问题只是表明在范围方面缺乏理解。
函数printx()
不是类SomeClass
上的方法,而是一个在您定义的特定init()
方法范围内的函数。
如上所述,printx()
会在您调用init()
方法时执行(并将打印):
请参阅顶部右侧窗格中的框?这向我们展示了我们游乐场的所有控制台输出,就像我们运行它时显示的那样。
但是,我们现在无法拨打ab.printx()
,因为正如我之前所说,printx()
不是班级SomeClass
的成员。如果我们想在printx()
的实例上调用SomeClass
,我们必须将其定义为类的实例方法(如果我们仍想在init
中调用它,我们可以)
答案 1 :(得分:0)
也许你会做这样的事情?
class someclass {
var a : Int
var b : Int
func printx () {
println("you called the function")
}
init() {
self.a = 5
self.b = 4
printx()
}
}
var ab = someclass()
ab.printx()
请注意,您永远不会致电init()
,而只需someClass()
答案 2 :(得分:0)
对于您的问题:否 - 您无法在printx
之外引用init
而您是{ - printx
将在init
被调用时执行。在Swift 1.2中:
20> class Bar {
21. var ping : Int
22. init () {
23. ping = 1
24. func bar () { println ("bar") }
25. bar()
26. }
27. }
28> Bar()
bar
$R4: Bar = {
ping = 1
}
在printx
中定义init
是完全可行的,您应该要求它有效(并且确实如此)。在词法中包含Swift中的函数定义至关重要。现在,如果语言可以允许递归显示函数名称......