在初始化程序中调用函数:Swift
Calling function in initializer : Swift
我想在初始化器中调用一个函数,但我做不到
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() 函数会执行吗
也许你会做这样的事情?
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()
对于您的问题:不 - 您不能从 init
外部引用您的 printx
是的 - 您的 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
}
在 init
中定义您的 printx
是完全可行的,您应该要求它有效(并且确实有效)。在 Swift 中按词法包含函数定义非常重要。现在,如果语言允许函数名递归可见...
这个问题只是表明对范围缺乏理解。
函数 printx()
不是 class SomeClass
上的方法,而是在您定义的特定 init()
方法范围内的函数。
正如所写,当您调用 init()
方法时,printx()
将执行(并打印):
看到顶部右窗格中的框了吗?这向我们展示了 playground 的所有控制台输出,与我们 运行 否则显示的完全一样。
但是,我们现在不能调用 ab.printx()
,因为正如我之前所说,printx()
不是 class SomeClass
的成员。如果我们想在 SomeClass
的实例上调用 printx()
,我们必须将它定义为 class 的实例方法(如果我们仍然想在 init
中调用它,我们可以)。
我想在初始化器中调用一个函数,但我做不到
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() 函数会执行吗也许你会做这样的事情?
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()
对于您的问题:不 - 您不能从 init
外部引用您的 printx
是的 - 您的 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
}
在 init
中定义您的 printx
是完全可行的,您应该要求它有效(并且确实有效)。在 Swift 中按词法包含函数定义非常重要。现在,如果语言允许函数名递归可见...
这个问题只是表明对范围缺乏理解。
函数 printx()
不是 class SomeClass
上的方法,而是在您定义的特定 init()
方法范围内的函数。
正如所写,当您调用 init()
方法时,printx()
将执行(并打印):
看到顶部右窗格中的框了吗?这向我们展示了 playground 的所有控制台输出,与我们 运行 否则显示的完全一样。
但是,我们现在不能调用 ab.printx()
,因为正如我之前所说,printx()
不是 class SomeClass
的成员。如果我们想在 SomeClass
的实例上调用 printx()
,我们必须将它定义为 class 的实例方法(如果我们仍然想在 init
中调用它,我们可以)。