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?
}
我试图访问扩展程序中的 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
?
as
的目标是类型,而不是变量。您对 presentedBy
的唯一了解是它的类型 Optional<UIViewController>
。而 segue.destination
是 UIViewController 类型。由于每种类型都可以提升为其类型的可选类型,因此您的 as
没有做任何事情。完成后,您知道它是一个 UIViewController。你可以开始了。您可以调用任何您想要的 UIViewController 方法,但无论如何您都可以这样做。
简而言之:您的 as!
没有做任何事情。摆脱它。
(正如@Runt8 所说,是的,您绝对可以从扩展访问存储的属性,但这与您的实际问题无关。)
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
?
as
的目标是类型,而不是变量。您对 presentedBy
的唯一了解是它的类型 Optional<UIViewController>
。而 segue.destination
是 UIViewController 类型。由于每种类型都可以提升为其类型的可选类型,因此您的 as
没有做任何事情。完成后,您知道它是一个 UIViewController。你可以开始了。您可以调用任何您想要的 UIViewController 方法,但无论如何您都可以这样做。
简而言之:您的 as!
没有做任何事情。摆脱它。
(正如@Runt8 所说,是的,您绝对可以从扩展访问存储的属性,但这与您的实际问题无关。)