2017-04-01 93 views
0

我寫,可以展開/摺疊自定義表頭的看法,我寫了一個協議,因爲它象下面這樣:如何正確設置協調類中的屬性?

protocol ExpandableHeadViewDelegate{ 
    var expandStateReference : [String : Bool] { get set } 
    var tblVw     : UITableView { get set } 
    func didTapActionFromHeadVw(_ view: ExpandableHeadView, tag: Int) 
} 

這裏是我的膨脹頭部視圖類,什麼我試着去實現時,這種觀點是被螺孔我就能打電話,我從那裏expandableView嵌入的UITableView需要的方法:

class ExpandableHeadView: UIView { 
    var delegate : ExpandableHeadViewDelegate? 
    //set up tap recognizer 
    . 
    . 
    . 
    . 
    private func viewTapped { 
     if let delegate = delegate { 
      delegate.tblVw.reloadData() 
     } 
    } 

} 

我的ViewController利用這個類是如下:

class PlayersViewController: UIViewController,UITableViewDelegate, 
UITableViewDataSource, ExpandableHeadViewDelegate { 
    var expandedCells = [String : Bool]() // 
    @IBOutlet var tableVw: UITableView! // compile time error 
} 

我現在面臨的問題是,即使我宣佈我的「無功tableVw」在我的委託類,Xcode中給我一個錯誤:

Protocol requires property 'tableVw' with type 'UITableView'; do you want to add stub?

設置var expandedCells ..但是設置正確。如果我將我的tableVw設置爲非IBOutlet,它可以編譯,但我希望我的tableVw成爲IBOutlet屬性。

編輯: 添加一個stub變量爲tableVw和分配我的tableView IBOutlet它的作品。在協議中的財產申報爲UITableView! - 但我還在好奇這是否可以不使用可變

internal var tableVw: UITableView? 
@IBOutlet var tableView: UITableView! 
. 
. 
func viewDidload { 
    self.tableVw = self.tableView 
} 

回答

1

存根很簡單地實現。 !很重要 - 很多。

!使變量成爲一個可選的,但明確的解包。這基本上意味着,展開是在你的底下完成的。你承諾編譯器,儘管這個變量可以包含一個nil,但在你嘗試訪問它之前,你將確保它將被設置爲一個合適的值。如果是IBOutlets,則由SDK完成。

相關問題