大家知道自从Apple的大神Chris Lattner闲的没事干,娱乐之余搞出了Swift之后,混合使用Swift与ObjC已变成我等的家常便饭。
尽管Swift很性感,但目前还无法完全摆脱发胖变老的Objc,虽然Apple也很想完美整合两者,但现实并不那么理想。
最近遇到一个问题,项目中包含Objc的代码,而需求原因我需要用Swift写一个协议,供其调用:
protocol TreeTVCellDelegate where Self:FormViewController { }
为了方便,我还写了一个扩展:
extension TreeTVCellDelegate{ func updateTableHeight(){ tableView.beginUpdates() tableView.endUpdates() tableView.layoutIfNeeded() } }
接下来我在刷新视图的时候,调用以上方法刷新Table高度:
UIView.animate(withDuration: 0.1){ self.frame.size.height = self.treeTableView.contentSize.height //手动刷新整个TableView的高度 self.delegate?.updateTableHeight() }
然而运行App后会在调用updateTableHeight()时崩掉,提示访问违例。
网上找了一下,大部分都说是目前Swift和ObjC兼容之间有Bug,解决起来很简单,只要在协议头部增加@objc修饰符即可:
@objc protocol TreeTVCellDelegate where Self:FormViewController { }
再次运行App,大功告成! ;)