2016-03-25 22 views
2

假定以下:在初始化程序中使用函数 - Swift?

class A { 
    let x : Int 
    init() { 
     self.x = assign(1) 
    } 
    func assign(y : Int) -> Int { 
     return y 
    } 
} 

这产生一个错误。

这是我的问题:有没有办法在类初始化程序中调用函数?

编辑:添加错误消息:都存储属性之前

使用方法调用分配'自我'的初始化

+0

什么是您遇到的异常/错误?看看你得到的实际结果会有所帮助 – konkked

+0

有多种解决方案,但真正的用例会有所帮助。 – Sulthan

回答

1

我认为这是不是最大的解决方案,但它仍然工作中。

class A { 
     var variable : Int 

     init() { 

      self.variable = A.assign(1) 

     } 

     private class func assign(y : Int) -> Int { 
      return y 
     } 
    } 
+0

它的工作原理,谢谢。出于好奇,为什么这个工作,而以前的方法没有? –

+0

它是一个类函数,这种函数不需要初始化对象或@Sulthan你能深入解释一下吗 –

0

你可以使用像出头:

class A { 
    var x : Int! 
    init() { 
     x = assign(1) 
    } 
    func assign(y : Int) -> Int { 
     return y 
    } 
} 

这种方法的缺点是,如果你访问x并且将不会被初始化,你会得到一个运行时错误。退房this答案。

+0

什么让x!在x不工作时工作? –

+0

它可以工作,因为现在'x'是可选的,所以错误不再适用。现在,在所有存储的属性被初始化之前,您不使用'self',因为您不再拥有这些属性,现在它们是可选项。 – Jelly

1

不能调用实例方法,直到实例初始化(前init完成),但你可以使用使用classstatic关键字定义模块级的功能和type methods

func compute(y: Int) -> Int { 
    return y 
} 

class A { 
    let x: Int 

    static func assign(y: Int) -> Int { 
    return y 
    } 

    init() { 
    x = A.assign(3) + compute(4) 
    } 
} 
相关问题