View with generic


#1

Добрый день, подскажите пожалуйста, я правильно понимаю, что нет возможности использовать BaseTextField view в сториборде

class SimpleField<Field: UIView & TextFieldType>: UIView { }

class BaseTextField: SimpleField<UITextField> { }

а точнее делать iboutlet с него!?


#2

Нет, дженерики из свифта objc не понимает.

Можно так попробовать обойти:

class ViewController: UIViewController {
    @IBOutlet var textField: BaseTextField!
}

protocol TextFieldType {
    var text: String? { get }
}

extension UITextField: TextFieldType {}

protocol SimpleField {
    associatedtype T: UIView & TextFieldType
    var textField: T! { get }
}

extension SimpleField {
    func printText() {
        print(textField.text ?? "undefined")
    }
}

class BaseTextField: UIView, SimpleField {
    var textField: UITextField!
}

#3

Спасибо))
Попробую))
Думаю пора максимально отказываться от сториборда))


#4

Получается у меня весь базовый функционал должен быть в протоколе прописан!?


#5

Получается так) Особой разницы с классами нет.