【发布时间】:2015-06-22 00:56:15
【问题描述】:
我有这个代码
import UIKit
class SliderControllerView: UIView{
private let type: ControlType!
private let label: UILabel!
private let slider: UISlider!
private weak var delegate: SliderControllerDelegate?
private let defaults: SliderDefaults!
convenience init(type: ControlType, defaults: SliderDefaults, delegate: SliderControllerDelegate?) {
self.init()
self.type = type
self.delegate = delegate
self.defaults = defaults
setTranslatesAutoresizingMaskIntoConstraints(false)
label = UILabel()
configureLabel()
slider = UISlider()
configureSlider(slider)
SliderDefaults.set(slider, defaults: defaults)
if let valueFromDetauls = userDefaultsValue {
slider.value = Float(valueFromDetauls)
}
saveValueInUserDefaults()
updateLabel()
}
错误信息:
- 无法在“self”中分配给“type”
- 无法分配给“self”中的“defaults”
- 无法分配给“self”中的“label”
- 无法分配给“self”中的“slider”
我做什么? 谢谢!
【问题讨论】:
-
你的意思是
super.init()对吧? -
当我使用 super.init() 时,出现错误“必须调用超类 'UIView' 的指定初始化程序”
-
如果您不想设置框架,则应致电
super.init(frame: CGRectZero)。如果您调用self.init(),它将一遍又一遍地递归调用init -
我得到错误:属性 'self.type' 未在 super.init 调用时初始化 不可变值 'self.type 只能初始化一次 不可变值 'self.defaults' 只能初始化一次 不可变值“self.label”只能被初始化一次不可变值“self.slider”只能被初始化一次
-
你应该在所有的类变量都初始化之后调用
super.init
标签: swift initialization uikit init