Int не конвертируется в ошибку CGFloat при подклассе UIImageView

У меня тут странный баг.

Я создаю подкласс UIImageView, чтобы передать некоторые пользовательские свойства своим представлениям. Если я не добавлю метод инициализации в свой подкласс, все в порядке.

Но если я добавлю инициализацию (а я должен это сделать), то при создании представления кадра компилятор жалуется, что Int не может быть преобразован в CGFloat.

Le подкласс с 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")
}
}

И Ле ошибка при создании Фрейма.

 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».


person Nicolas Kalogeropoulos    schedule 20.09.2014    source источник


Ответы (1)


В вашей инициализации вы забыли вызвать родительский инициализатор:

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

Это должно решить проблему компиляции - осталось выяснить, как инициализировать свойства, реализованные в вашем классе - возможно, вам следует использовать необязательные параметры.

person Antonio    schedule 20.09.2014
comment
Спасибо, это на деле решило проблему. Но мне не удается заставить мои экземпляры получить уникальное значение для свойства someParameter. Когда я создаю более одного экземпляра, все они получают одинаковое значение этого свойства. Я задам новый вопрос об этом, даже если он должен быть очень нубским. Спасибо, в любом случае ! - person Nicolas Kalogeropoulos; 21.09.2014