ios – 在Swift初始化期间调用实例方法

前端之家收集整理的这篇文章主要介绍了ios – 在Swift初始化期间调用实例方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我是 Swift的新手,想使用一个这样的实例方法来初始化一个对象的成员变量:
class MyClass {
  var x: String
  var y: String

  func createY() -> String {
    self.y = self.x + "_test" // this computation could be much more complex
  }

  init(x: String) {
    self.x = x
    self.y = self.createY()
  }     
}

基本上,我不想在init方法中内联所有初始化代码,而是将y的初始化代码提取到专用方法createY,并在init中调用此实例方法createY.然而,Swift编译器(Xcode 6.3测试版中的Swift 1.2编译器)抱怨:@H_404_5@

use of ‘self’ in method call ‘xxx’ before super.init initialize self@H_404_5@

这里’xxx’是实例方法(createY)的名称.@H_404_5@

我可以理解Swift编译器的抱怨和潜在的问题.但是,我不知道如何解决它.在Swift中调用init的初始化代码的其他实例方法应该是正确的方法?@H_404_5@

目前,我使用以下技巧作为工作,但我不认为这是这个问题的惯用方法(这个解决方法要求使用var声明,而不是让我感到不舒服)@H_404_5@

init(x: String) {
  self.x = x
  super.init()
  self.y = createY()
}

任何评论都不胜感激.谢谢.@H_404_5@

解决方法

将createY()转换为接受x作为参数并返回y的全局或类函数.
func createY(x: String) -> String {
    return x + "_test" // this computation could be much more complex
}

然后从init正常调用它.@H_404_5@

class MyClass {
  let x: String
  let y: String

  init(x: String) {
    self.x = x
    self.y = createY(x)
  }     
}

猜你在找的iOS相关文章