Swift: Custom ViewController 초기화기
사용자 지정 이니셜라이저를 추가하는 방법UIViewController스위프트의 하위 클래스?
나는 다음의 하위 클래스를 만들었습니다.UIViewController다음과 같은 모습입니다.
class MyViewController : UIViewController
{
init(leftVC:UIViewController, rightVC:UIViewController, gap:Int)
{
self.leftVC = leftVC;
self.rightVC = rightVC;
self.gap = gap;
super.init();
setupScrollView();
setupViewControllers();
}
}
실행하면 치명적인 오류가 나타납니다.
치명적 오류: 'MyApp' 클래스에 구현되지 않은 이니셜라이저 'init(nibName: 번들:)'을 사용합니다.내 보기 컨트롤러'
사용자 정의 이니셜라이저를 추가할 때도 오버라이드해야 한다는 내용을 어디서 읽었습니다.init(coder aDecoder:NSCoder)그러니 그걸 무시하고요.init어떻게 되는지 확인해 보십시오.
override init(coder aDecoder: NSCoder)
{
super.init(coder: aDecoder);
}
이것을 추가하면 Xcode는 다음과 같이 불평합니다.self.leftVC is not initialized at super.init call. 그래서 그것도 해결책이 될 수 없다고 생각합니다.그래서 어떻게 하면 사용자 정의 이니셜라이저를 적절하게 추가할 수 있는지 궁금합니다.ViewController스위프트의 하위 클래스(목표-C에서는 문제가 없는 것으로 보이므로)?
해결했습니다.지정된 이니셜라이저를 호출해야 합니다. 이 경우 nibName이 있는 init입니다. 분명히...
init(leftVC:UIViewController, rightVC:UIViewController, gap:Int)
{
self.leftVC = leftVC
self.rightVC = rightVC
self.gap = gap
super.init(nibName: nil, bundle: nil)
setupScrollView()
setupViewControllers()
}
스위프트 5
사용자 정의 이니셜라이저를 다음에 쓰려면UIViewController로 초기화된.storyBoard.instantiateViewController(withIdentifier: "ViewControllerIdentifier")
사용자 지정 이니셜라이저는 에 대해서만 작성할 수 있습니다.Optional특성.
class MyFooClass: UIViewController {
var foo: Foo?
init(with foo: Foo) {
self.foo = foo
super.init(nibName: nil, bundle: nil)
}
public required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.foo = nil
}
}
좀 더 일반적인 UIViewController의 경우 Swift 2.0 현재 버전을 사용할 수 있습니다.
init() {
super.init(nibName: nil, bundle: nil)
}
이 문제를 완벽하게 해결했는지는...그러나 클래스의 인터페이스가 어떻게 보이기를 원하는지, 코더 기능이 실제로 필요한지 여부에 따라 다음을 사용할 수도 있습니다.
convenience required init(coder aDecoder: NSCoder)
{
//set some defaults for leftVC, rightVC, and gap
self.init(leftVC, rightVC, gap)
}
부터init:leftVC:rightVC:gap는 지정된 이니셜라이저이며, 를 구현하기 위한 요구사항을 충족할 수 있습니다.init:coder사용자가 지정한 이니셜라이저를 호출하는 편리한 이니셜라이저로 만들 수 있습니다.
이것이 더 나을 수 있습니다.
override init(coder aDecoder: NSCoder)
{
super.init(coder: aDecoder);
}
속성을 초기화해야 하는 경우 다시 작성해야 하기 때문입니다.
언급URL : https://stackoverflow.com/questions/25527311/swift-custom-viewcontroller-initializers
'programing' 카테고리의 다른 글
| $(문서.본문)과 $('본문')의 차이 (0) | 2023.09.07 |
|---|---|
| 폴더의 크기를 계산하려면 어떻게 해야 합니까? (0) | 2023.09.07 |
| Ctrl + TEXT AREA에서 jQuery를 사용하여 입력합니다. (0) | 2023.09.07 |
| 카테고리별로 최신 4가지 아이템을 선택하는 방법은? (0) | 2023.09.07 |
| CSS로 배경 이미지에 크기를 설정하시겠습니까? (0) | 2023.09.07 |