SWIFT:是否可以在其扩展中访问 class 的存储属性?

SWIFT: Is it possible to access stored properties of a class inside its extension?

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

我试图访问扩展程序中的 sharedInstancepresentedBy

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,并且工作正常。

关键是我想知道有没有办法在扩展程序中访问 sharedInstancepresentedBy

as 的目标是类型,而不是变量。您对 presentedBy 的唯一了解是它的类型 Optional<UIViewController>。而 segue.destination 是 UIViewController 类型。由于每种类型都可以提升为其类型的可选类型,因此您的 as 没有做任何事情。完成后,您知道它是一个 UIViewController。你可以开始了。您可以调用任何您想要的 UIViewController 方法,但无论如何您都可以这样做。

简而言之:您的 as! 没有做任何事情。摆脱它。

(正如@Runt8 所说,是的,您绝对可以从扩展访问存储的属性,但这与您的实际问题无关。)