您当前的位置: 首页 >  swift

iOS中Swift与Objc混合编程使用协议出现内存访问违例的原因及解决

发布时间:2018-06-12 09:21:48 ,浏览量:0

大家知道自从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,大功告成! ;)

关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    107766博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0721s