子类化UIImageView时,“Int不可转换为CGFloat”错误

时间:2014-09-20 13:18:27

标签: swift uiimageview int subclass cgfloat

我这里有一个奇怪的错误。

我将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'"。

1 个答案:

答案 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)
}

这应该解决编译问题 - 剩下的就是弄清楚如何初始化你班级中实现的属性 - 也许你应该使用选项。