Обходной путь для загрузки подкласса UIView с общими ограничениями из Interface Builder?

Допустим, у меня есть подкласс UIView с общим ограничением:

class CustomView<DataType: Codable>: UIView {
    var model: DataType?
}

И я хочу загрузить это представление из IB

введите здесь описание изображения

Это приводит к сбою приложения: «Неизвестный класс _TtC5Test110CustomView в файле построителя интерфейсов». Это, очевидно, связано с тем фактом, что IB ничего не знает о типе, который ему нужно передать, чтобы общее ограничение соответствовало требованию. Я мог бы просто создать представление в коде и передать тип ограничения. Но мне интересно, может ли быть обходной путь, чтобы представление все еще можно было загрузить из IB.


person Au Ris    schedule 05.02.2020    source источник


Ответы (1)


Но мне интересно, может ли быть обходной путь, чтобы представление все еще можно было загрузить из IB.

Нет, нет. IB — это Objective-C Cocoa. Его нельзя заставить видеть или манипулировать дженериком Swift.

IB ничего не знает о типе, который ему нужно передать, чтобы общее ограничение соответствовало требованию.

IB вообще ничего не знает о дженериках Swift. Тот факт, что вы смогли ввести CustomView в качестве класса представления, сам по себе является ошибкой.

person matt    schedule 05.02.2020
comment
Я бы даже сказал, что общий подкласс типа Cocoa — это плохой дизайн с самого начала. Просто потому, что компилятор это допускает, это не делает его жизнеспособным. - person matt; 05.02.2020