class BibliothequesViewController: UIViewController {
 static let sharedInstance = BibliothequesViewController()
   var presentedBy: UIViewController?
 }

मैंने एक्सटेंशन के अंदर sharedInstance और presentedBy दोनों को एक्सेस करने का प्रयास किया:

extension BibliothequesViewController: UITableViewDelegate, UITableViewDataSource {
       override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
            //Trying to present by using presentBy property
        let vc = segue.destination as! presentedBy
        // This throws this error: Use of undeclared type 'presentedBy' 
        let vc = segue.destination as! BibliothequesViewController.sharedInstance.presentedBy
        // This throws this error: Static property 'sharedInstance' is not a member type of 'BibliothequesViewController'
       }
  }

पहली त्रुटि समझ में आती है।
दूसरा ऐसा नहीं है जैसा मैंने ऐप में अन्य क्षेत्रों में BibliothequesViewController.sharedInstance.presentedBy का उपयोग किया है और यह ठीक काम करता है।

मुद्दा यह है कि मैं जानना चाहता हूं कि क्या एक्सटेंशन के अंदर sharedInstance या presentedBy तक पहुंचने का कोई तरीका है?

-2
Ahmed Ghrib 4 सितंबर 2020, 17:47

1 उत्तर

सबसे बढ़िया उत्तर

as का लक्ष्य एक प्रकार है, चर नहीं। presentedBy के बारे में आप केवल यही जानते हैं कि यह Optional<UIViewController> प्रकार का है। और segue.destination UIViewController प्रकार का है। चूंकि हर प्रकार को उसके प्रकार के वैकल्पिक में प्रचारित किया जा सकता है, आपका as कुछ भी नहीं कर रहा है। जब आप पूरा कर लें, तो आप जानते हैं कि यह एक UIViewController है। तुम जाने के लिए अच्छे हो। आप अपनी इच्छित किसी भी UIViewController विधियों को कॉल कर सकते हैं, लेकिन आप वैसे भी ऐसा कर सकते हैं।

संक्षेप में: आपका as! कुछ नहीं कर रहा है। बस इससे छुटकारा पाएं।

(जैसा कि @ Runt8 नोट करता है, हां, आप निश्चित रूप से किसी एक्सटेंशन से संग्रहीत गुणों तक पहुंच सकते हैं, लेकिन इसका आपके वास्तविक प्रश्न से कोई लेना-देना नहीं है।)

1
Rob Napier 4 सितंबर 2020, 18:19