因此,我對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)
我並沒有與谷歌的任何運氣和所有其他的解決方案,我一直都有點古怪,所以我想我最好問別人。
這取決於如何創建'BuyStatsTabPager'實例並設置屬性。 – vadian