我这里有一个奇怪的错误。
我将UIImageView子类化为一些自定义属性传递给我的视图。 如果我不在我的子类中添加init方法,那么一切都很好。
但是如果我确实添加了init(并且我需要这样做),那么当我创建帧视图时,编译器会抱怨Int不能转换为CGFloat。
Le init的子类:
class CustomUIImageView : UIImageView {
let someParameter : Bool
init(someParameter: Bool) {
self.someParameter = someParameter
println("\(someParameter) is being initialized")
}
//Since the release of the GM version of XCode 6, it's asking me to pass this init below
//if I'm initializing a value. Frankly, I've no idea why, what's for nor what should I do about it.
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
deinit {
println("\(someParameter) is being deinitialized")
}
}
创建框架时出现Le错误。
var myView: CustomUIImageView!
myView = CustomUIImageView(frame: (CGRectMake(0, 0, 100, 100)))
//compiler says "Int is not convertible to CGFloat".
这是某种错误,还是我做错了什么(这是非常合理的)?
编辑:我已经读过我需要通过以下方式直接转换为CGFloat:
myView = CustomUIImageView(frame: (CGRectMake(CGFloat(0), 0, 100, 100)))
但是编译器再次抱怨说" Type()不符合协议' IntergerLiteralConvertible'"。
答案 0 :(得分:0)
在您的初始化中,您忘记调用父初始值设定项:
init(someParameter: Bool) {
self.someParameter = someParameter
println("\(someParameter) is being initialized")
super.init() // << this is missing
}
然而,看起来还有另一个初始化程序,它是必需的,但未明确说明:
override init(frame: CGRect) {
self.someParameter = false
super.init(frame: frame)
}
这应该解决编译问题 - 剩下的就是弄清楚如何初始化你班级中实现的属性 - 也许你应该使用选项。