我正在尝试在我的添加中添加颜色选择器,并使用此https://github.com/gizmosachin/ColorSlider库,该库仅使用swift编写,我使用objective-c。我已经按照本指南How to call Objective-C code from Swift了解了如何在objective-c项目中添加swift库。我99%肯定我已经正确配置了xcode,因为我可以导入swift库并运行我的应用程序而没有错误,只有当我尝试实例化应用程序崩溃的swift类时,我才会看到init方法swift类被无限调用。该库的源代码是一个文件,仅供参考(https://github.com/gizmosachin/ColorSlider/blob/master/Source/ColorSlider.swift)
这是init方法之一(其他内容是覆盖)
// MARK: Initializers
convenience init() {
println("hi there swift")
self.init()
backgroundColor = UIColor.clearColor()
}
在我的日志中,我看到“hi there swift”打印多次。这就是我启动swift类的方法
ColorSlider *colorSlider = [[ColorSlider alloc] init];
我知道包含上面代码行的函数只被调用一次,因为我使用NSLog(@“output”)来查看它显示的次数,输出看起来像这样
output
hi there swift
hi there swift
hi there swift
hi there swift
hi there swift
etc...to infinity or until app crashes
我是否正确地实例化了swift类?我不确定为什么swift类的init方法被无限调用
----的更新 -----
答案 0 :(得分:2)
删除self.init。该方法自称。
答案 1 :(得分:2)
在Objective-C中,类可以具有便利(辅助)初始化器和指定(主要)初始化器。
代码执行的路径应该是:
self.designatedInit()
调用指定的初始值设定项。super.designatedInit()
调用超级指定的初始化程序。在您的代码中,init()
是一个便利初始化程序(convenience init()
)。调用self.init()
将导致无限循环,因为这是Dan本身实际运行的函数。
如果您将其更改为super.init()
,便捷初始化程序正在调用超级初始化程序,由于上述规则#1,这是非法的。
怎么办?
init()
是否真的是一个便利初始化器。self.designatedInit()
而不是self.init()
。init()
的分类并调用super.init()
(或者超级类的指定初始化程序。