Swift의 UIViewController에서 기본 super.init()를 호출할 수 없는 이유는 무엇입니까?
사용하지 않습니다.UIViewController
스토리보드에서 그리고 나는 커스텀을 원합니다.init
내가 통과하는 기능NSManagedObjectID
어떤 목적의그냥 전화하고 싶어요super.init()
제가 오브젝티브-C에서 했던 것처럼.다음과 같이:
init(objectId: NSManagedObjectID) {
super.init()
}
그러나 다음과 같은 컴파일러 오류가 발생합니다.
Superclass UIViewController의 지정 이니셜라이저를 호출해야 합니다.
더 이상은 안 해도 되나요?
다음에 대한 지정된 이니셜라이저UIViewController
이라initWithNibName:bundle:
당신은 그것을 대신 불러야 합니다.
http://www.bignerdranch.com/blog/real-iphone-crap-2-initwithnibnamebundle-is-the-designated-initializer-of-uiviewcontroller/ 을 참조하십시오.
닙이 없으면 전달합니다.nil
nibName(번들도 선택 사항임)에 대해 설명합니다.그런 다음 사용자 정의 보기를 구성할 수 있습니다.loadView
또는 하위 뷰를 에 추가함으로써self.view
에viewDidLoad
예전처럼 말입니다.
또 다른 좋은 솔루션은 새로운 이니셜라이저를 다음과 같이 선언하는 것입니다.convenience
이니셜라이저는 다음과 같습니다.
convenience init( objectId : NSManagedObjectID ) {
self.init()
// ... store or user your objectId
}
하위 클래스에 지정된 이니셜라이저가 없다고 선언하면 해당 이니셜라이저는 자동으로 상속되며 사용자는self.init()
편리한 이니셜라이저 안에 있습니다.
UIViewController의 경우 기본 init 메서드가 호출합니다.init(nibName nibNameOrNil: String!, bundle nibBundleOrNil: NSBundle!)
와 함께nil
두 인수(명령-클릭하면 UIViewController에 해당 정보가 표시됩니다.)
TL;TR: 프로그래밍 방식으로 작업하려는 경우UIViewController
다음은 사용자 지정 인수를 사용하여 새 이니셜라이저를 추가하는 완전한 작업 예제입니다.
class MyCustomViewController: UIViewController {
var myString: String = ""
convenience init( myString: String ) {
self.init()
self.myString = myString
}
}
오큘러스의 답변을 개선하기 위해:
init() {
super.init(nibName: nil, bundle: nil)
}
업데이트: 링크 추가
https://developer.apple.com/documentation/uikit/uiviewcontroller/1621359-init
iOS용 문서에 따르면, UIView 컨트롤러의 지정 이니셜라이저는 다음과 같습니다.initWithNibName: bundle:
.
UIViewController를 하위 클래스로 분류하는 경우 NIB를 사용하지 않더라도 이 메서드의 슈퍼 구현을 호출해야 합니다.
다음과 같이 수행할 수 있습니다.
init(objectId : NSManagedObjectID) {
super.init(nibName: (xib's name or nil'), bundle: nil)
// other code...
}
또는
새 이니셜라이저를 편의 이니셜라이저로 선언합니다.
convenience init( objectId : NSManagedObjectID ) {
self.init()
// other code...
}
언급URL : https://stackoverflow.com/questions/24095037/why-cant-i-call-the-default-super-init-on-uiviewcontroller-in-swift
'source' 카테고리의 다른 글
Javascript ES6 클래스 인스턴스를 복제하는 방법 (0) | 2023.08.05 |
---|---|
숫자가 나올 때까지 타임리프 루프 (0) | 2023.08.05 |
도커에서 "노출"과 "공개"의 차이점은 무엇입니까? (0) | 2023.08.05 |
회로 차단기와 벌크헤드 패턴의 차이점은 무엇입니까? (0) | 2023.08.05 |
IPython 종료 확인 사용 안 함 (0) | 2023.08.05 |