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编译器)抱怨:
use of ‘self’ in method call ‘xxx’ before super.init initialize self
这里’xxx’是实例方法(createY)的名称.
我可以理解Swift编译器的抱怨和潜在的问题.但是,我不知道如何解决它.在Swift中调用init的初始化代码的其他实例方法应该是正确的方法?
目前,我使用以下技巧作为工作,但我不认为这是这个问题的惯用方法(这个解决方法要求使用var声明,而不是让我感到不舒服)
init(x: String) { self.x = x super.init() self.y = createY()}
任何评论都不胜感激.谢谢.
解决方法 将createY()转换为接受x作为参数并返回y的全局或类函数.func createY(x: String) -> String { return x + "_test" // this computation Could be much more complex}
然后从init正常调用它.
class MyClass { let x: String let y: String init(x: String) { self.x = x self.y = createY(x) } }总结
以上是内存溢出为你收集整理的ios – 在Swift初始化期间调用实例方法全部内容,希望文章能够帮你解决ios – 在Swift初始化期间调用实例方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)