在初始化程序中调用函数:Swift

时间:2015-04-04 13:39:11

标签: swift 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()函数会执行吗?

3 个答案:

答案 0 :(得分:1)

这个问题只是表明在范围方面缺乏理解。

函数printx()不是类SomeClass上的方法,而是一个在您定义的特定init()方法范围内的函数。

如上所述,printx()会在您调用init()方法时执行(并将打印):

enter image description here

请参阅顶部右侧窗格中的框?这向我们展示了我们游乐场的所有控制台输出,就像我们运行它时显示的那样。

但是,我们现在无法拨打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中的函数定义至关重要。现在,如果语言可以允许递归显示函数名称......