बनाता है मेरे पास UINavigationController
और UITableViewController
के उप-वर्ग हैं।UINavigationController subclass की सुविधा प्रारंभिकता subclass निरंतर init दो बार
उप-वर्गों को प्रारंभ करने के लिए मैंने कुछ convenience init
विधियों का उपयोग करने का निर्णय लिया जो सुपरक्लास के कुछ निर्दिष्ट प्रारंभकर्ता को कॉल करते हैं।
let someValue: SomeClass = SomeClass()
प्रत्येक वर्ग सफलतापूर्वक अपने नव निर्मित convenience init
विधि को फोन करके आरंभ नहीं हो जाता: इसके अलावा, प्रत्येक उपवर्ग कुछ let
निरंतर है।
समस्या यह है कि let
निरंतर UINavigationController
उपवर्ग में दो बारआरंभ नहीं हो जाता है।
import UIKit
import PlaygroundSupport
final class Navigation: UINavigationController {
convenience init(anyObject: Any) {
self.init(rootViewController: UIViewController())
}
let service = Constant("Constant Initialization -> Navigation")
}
final class Table: UITableViewController {
convenience init(anyObject: Any) {
self.init(style: .plain)
}
let service = Constant("Constant Initialization -> Table")
}
class Constant: NSObject {
init(_ string: String) {
super.init()
debugPrint(string)
}
}
Navigation(anyObject: NSNull())
Table(anyObject: NSNull())
क्या हमें ऊपर की तरह convenience init
का उपयोग करने की अनुमति है? क्यूं कर?
इन दो मामलों में convenience init
व्यवहार अलग क्यों है?
साथ जांचा गया: संस्करण 8.2 बीटा (8C30a), संस्करण 8.2 (8C38), संस्करण 8.2.1 (8C1002)
पी.एस. उपरोक्त कोड का खेल का मैदान लॉग:
"Constant Initialization -> Navigation"
"Constant Initialization -> Navigation"
"Constant Initialization -> Table"
आपके उत्तर के लिए धन्यवाद। और मुझे अभी भी समझ में नहीं आ रहा है कि उन दो मामलों में सुविधा init व्यवहार अलग क्यों है? – iWheelBuy
तो 'सुविधा' प्रारंभिक उपरोक्त उद्देश्य-सी उदाहरण init पैटर्न का उपयोग करता है, जहां दो इनिट कॉल (' [सुपर init] 'और '[self.class alloc] init ...]' नामित प्रारंभिक, मेरे द्वारा नामित प्रारंभकर्ता समझदारी, सीधे '[self.class alloc] init ...]' प्रारंभकर्ता पथ में जायेगी, और इसलिए प्रारंभिक दोगुनी नहीं होगी, जो आप देख रहे मुद्दे का कारण बनती है। – BHendricks
मैंने सोचा है कि दोनों मामलों में मैं नामित प्रारंभकर्ता कहता हूं, है ना? – iWheelBuy