Swift, проблемы с созданием экземпляра класса, совместимого с NSCoding

Я попал в блокпост с NSCoding. В частности, создание экземпляра класса, соответствующего NSCoding. Может быть, я упускаю что-то действительно очевидное, но я пока не нашел ответов.

```быстрый

class TitleTextField: UITextField, UITextFieldDelegate {



required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)!

    font = UIFont(name: "Helvetica-Neue", size: 25)

}

```

Это только один пример, простой. Когда я пытаюсь создать экземпляр этого класса в другом месте, то есть что-то вроде «let textField = TitleTextField ()» (извините, не могу понять, как это отформатировать), я получаю сообщение об ошибке «отсутствует аргумент для параметра« кодировщик »в вызове». Когда я пытаюсь исправить это с помощью предложенного TitleTextField (coder: NSCoder), он выдает ошибку и говорит мне удалить «coder:», затем выдает еще одну ошибку и говорит: «Не удается преобразовать значение типа» (NSCoder). Type '( он же 'NSCoder.Type') в ожидаемый тип аргумента 'NSCoder'"

Как создать экземпляр этого класса?

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


person R.P. Carson    schedule 18.03.2016    source источник


Ответы (2)


Это действительно просто - вам нужно добавить еще один назначенный инициализатор, обычно init(frame:) для UIView. На самом деле вы можете просто вызвать super.init(...) в нем.

Проблема в том, что как только вы добавите один инициализатор, другие инициализаторы перестанут наследоваться от суперкласса, и вам придется их определить.

person Sulthan    schedule 18.03.2016
comment
Я не понимаю, при чем тут UIView - person R.P. Carson; 19.03.2016
comment
@R.P.Carson UITextField является подклассом UIView, а инициализаторы исходят от UIView. - person Sulthan; 19.03.2016

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)

    font = UIFont(name: "Helvetica-Neue", size: 25)
}

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

public class UIView : UIResponder {
    public init?(coder aDecoder: NSCoder)
}
person ale_stro    schedule 18.03.2016
comment
Я не понимаю, при чем здесь UIView. И код компилируется, я просто не могу создать экземпляр TitleTextField - person R.P. Carson; 19.03.2016
comment
Это была просто копия-вставка кода из интерфейса UIView, чтобы показать реализацию required init. - person ale_stro; 21.03.2016