【问题标题】:"Int is not convertible to CGFloat" error when subclassing UIImageView继承 UIImageView 时出现“Int is not convertible to CGFloat”错误
【发布时间】:2014-09-20 13:18:26
【问题描述】:

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

我正在继承 UIImageView 以将一些自定义属性传递给我的视图。 如果我不向我的子类添加 init 方法,一切都很好。

但是,如果我确实添加了 init(并且我必须这样做),那么当我创建框架视图时,编译器会抱怨 Int 不能转换为 CGFloat。

带有 Le init 的 Le 子类:

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")
}
}

创建 Frame 时出现 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'”。

【问题讨论】:

    标签: swift uiimageview int subclass cgfloat


    【解决方案1】:

    在您的 init 中,您忘记调用父初始化程序:

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

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

    【讨论】:

    • 谢谢,确实解决了这个问题。但我无法让我的实例为属性 someParameter 获取唯一值。当我创建多个实例时,它们都会为该属性获得相同的值。我会对此提出一个新问题,即使认为它一定是一个非常菜鸟的问题。还是谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-17
    • 2017-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多