iOS - Swift
[iOS/Swift] Storyboard, ViewController 접근 코드를 Protocol로 정의 (StoryboardInstantiable)
개발자 수니
2022. 2. 9. 15:22
728x90
반응형
📌 이번 글은
Storyboard를 접근 코드를 Protocol로 정의하여,
필요한 곳에 사용하는 예제입니다.
코드에서 Storyboard, Xib를 접근하는 방법에 대한 포스팅입니다.
StoryboardInstantiable Protocol 정의
public protocol StoryboardInstantiable: NSObjectProtocol {
associatedtype T
static var defaultFileName: String { get }
static func instantiateViewController(_ bundle: Bundle?) -> T
}
StoryboardInstantiable 확장
extension StoryboardInstantiable where Self: UIViewController {
static var defaultFileName: String {
return NSStringFromClass(Self.self).components(separatedBy: ".").last!
}
static func instantiateViewController(_ bundle: Bundle? = nil) -> Self {
let fileName = defaultFileName
let storyboard = UIStoryboard(name: fileName, bundle: bundle)
guard let vc = storyboard.instantiateInitialViewController() as? Self else {
fatalError("Cannot instantiate initial view controller \(Self.self) from storyboard with name \(fileName)")
}
return vc
}
}
👩🏻💻 예제
Storyboard ViewController에 Storyboard ID 지정
ViewController Class에 StoryboardInstantiable 채택
import UIKit
class MainViewController: UIViewController, StoryboardInstantiable {
override func viewDidLoad() {
super.viewDidLoad()
}
}
코드에서 StoryboardInstantiable을 채택한 ViewController로 이동
let mainVC: MainViewController = MainViewController.instantiateViewController(Bundle.main)
self.navigationController?.pushViewController(mainVC, animated: true)
🙋🏻♀️ 참고
728x90
반응형