Swift - 从子类访问属性时遇到问题
因此,我对swift很陌生,并且从一个子类中学到了一些关于访问属性的知识。在这种情况下,我认为我的问题比这个更复杂。Swift - 从子类访问属性时遇到问题
我有一个tableview细节视图(BuyStats)。在“准备”方法中,我为BuyStats类设置属性“selectedPlayer”。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "BuyStats" {
let buyStats = segue.destination as! BuyStats
if let indexPath = tableView.indexPathForSelectedRow {
let player = players[indexPath.row]
buyStats.selectedPlayer = player
}
}
selectedPlayer在这里工作正常,我没有访问它的.Name属性的麻烦。
class BuyStats: UIViewController {
var selectedPlayer: Player! = nil
@IBOutlet weak var selectedPlayerNameLabel: UILabel!
@IBOutlet weak var spendAmount: UILabel!
override func viewDidLoad(){
let rightBarButton = UIBarButtonItem(title: "Enter", style: UIBarButtonItemStyle.plain, target: self, action: #selector(myRightSideBarButtonItemTapped(_:)))
self.title = "Buy Stats"
self.navigationItem.rightBarButtonItem = rightBarButton
selectedPlayerNameLabel.text = selectedPlayer.Name
}
但细节视图内我也有其保持导航控制器和BuyStats的子类的容器图。我还需要能够访问子类(BuyStatsTapPager)中的selectedPlayer,但它不起作用。
继承人故事板图片,以防我的设置有点混乱。
这是我需要从超类访问selectedPlayer属性。
class BuyStatsTabPager: BuyStats{
@IBOutlet var segmentedControl: UISegmentedControl!
@IBOutlet weak var scoreKey: UIBarButtonItem!
@IBOutlet weak var standings: UIBarButtonItem!
override func viewDidLoad() {
navigationController?.navigationBar.barTintColor = UIColor(red: 27/255, green: 27/255, blue: 27/255, alpha: 1)
scoreKey.setTitleTextAttributes([NSFontAttributeName: UIFont(name: "Helvetica", size: 13.0)!], for: UIControlState.normal)
scoreKey.tintColor = UIColor.blue
standings.setTitleTextAttributes([NSFontAttributeName: UIFont(name: "Helvetica", size: 13.0)!], for: UIControlState.normal)
standings.tintColor = UIColor.blue
但下面的print语句给我一个exc_bad_instruction错误。如果它在超类中成功设置,它不应该在子类中可用吗?
print(super.selectedPlayer.Name)
}
“selectedPlayer”显示了在不调用超级IDE所以我也试过了。
print(selectedPlayer.Name)
我并没有与谷歌的任何运气和所有其他的解决方案,我一直都有点古怪,所以我想我最好问别人。
您的故事板看起来像您的情况,您的segue的目的地不是BuyStats
而是导航控制器。在你的prepare(for: sender:)
方法中,试试这个:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "BuyStats" {
let nav = segue.destination as! UINavigationController
let buyStats = nav.viewControllers[0] as! BuyStatsTabPager
if let indexPath = tableView.indexPathForSelectedRow {
let player = players[indexPath.row]
buyStats.selectedPlayer = player
}
}
谢谢,这帮助我弄明白了。当我应该在BuyStats类中使用第二次准备时,我试图使用类继承。 –
这取决于如何创建'BuyStatsTabPager'实例并设置属性。 – vadian