В Swift мы можем создать класс унаследовав его от Objective-C класса точно так же как мы можем наследоваться от swift классов.
1 2 3 4 5 |
import UIKit class MySwiftViewController: UIViewController { } |
Если класс должен реализовать протокол NSCoding – необходимо реализовать инициализатор init(coder:). Если наследник класса реализующего протокол NSCoding получает дополнительные инициализаторы или любое свойство без начального значения – они тоже должны переопределять этот инициализатор.
У XCode есть код заглушка если на самом деле классу не нужна реализация этого протокола
1 2 3 |
required init(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } |
Но если объект все-таки будет использовать этот протокол (объект загружается из Storyboard, архивируется на диск) – необходимо корректно реализовать этот инициализатор.
Swift классы могут реализовывать протоколы как swift так и Objective-C стандартным образом
1 2 |
class MySwiftViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { } |
Обращаться можно напрямую к UITableViewDelegate, не нужно как в Objective-C – id<UITableViewDelegate>