Calling instance method during initialization in Swift(在 Swift 初始化期间调用实例方法)
问题描述
我是 Swift 新手,想用这样的实例方法初始化对象的成员变量:
I am new to Swift and would like to initialize an object's member variable using an instance method like this:
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 beta 中的 Swift 1.2 编译器)抱怨:
Basically, instead of inlining all the initialization code in init
method, I want to extract the initialization code of y
to a dedicated method createY
and call this instance method createY
in init
. However, Swift compiler (Swift 1.2 compiler in Xcode 6.3 beta) complains:
在super.init初始化self之前在方法调用'xxx'中使用'self'
use of 'self' in method call 'xxx' before super.init initialize self
这里的xxx"是实例方法的名称(createY).
Here 'xxx' is the name of the instance method (createY).
我可以理解 Swift 编译器在抱怨什么以及它想要解决的潜在问题.但是,我不知道如何解决它.在 Swift 中调用 init
中初始化代码的其他实例方法的正确方法应该是什么?
I can understand what Swift compiler is complaining and the potential problem it wants to address. However, I have no idea how to fix it. What should be the correct way in Swift to call other instance method of initialization code in init
?
目前,我使用以下技巧作为解决方法,但我认为这不是解决此问题的惯用方法(并且此解决方法需要使用 var
声明 y
code> 而不是 let
这让我也感到不安):
Currently, I use the following trick as work around but I don't think this is the idiomatic solution to this problem (and this workaround requires y
to be declared using var
instead of let
which makes me feel uneasy too):
init(x: String) {
self.x = x
super.init()
self.y = createY()
}
感谢任何评论.谢谢.
推荐答案
将 createY()
转换为接受 x
作为参数并返回一个全局或类函数y
.
Convert createY()
to a global or class function that accepts x
as an argument and returns a y
.
func createY(x: String) -> String {
return x + "_test" // this computation could be much more complex
}
然后从你的 init
正常调用它.
Then just call it normally from your init
.
class MyClass {
let x: String
let y: String
init(x: String) {
self.x = x
self.y = createY(x)
}
}
这篇关于在 Swift 初始化期间调用实例方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在 Swift 初始化期间调用实例方法
基础教程推荐
- 如何在没有IB的情况下将2个按钮添加到右侧的UINavigationbar? 2022-01-01
- 在 gmail 中为 ios 应用程序检索朋友的朋友 2022-01-01
- 如何让对象对 Cocos2D 中的触摸做出反应? 2022-01-01
- Kivy Buildozer 无法构建 apk,命令失败:./distribute.sh -m “kivy"d 2022-01-01
- 当从同一个组件调用时,两个 IBAction 触发的顺序是什么? 2022-01-01
- 如何在 UIImageView 中异步加载图像? 2022-01-01
- 如何在 iPhone 上显示来自 API 的 HTML 文本? 2022-01-01
- Android:对话框关闭而不调用关闭 2022-01-01
- UIWebView 委托方法 shouldStartLoadWithRequest:在 WKWebView 中等效? 2022-01-01
- android 应用程序已发布,但在 google play 中找不到 2022-01-01