swift 几个比较好的UI库
1.tableView的代理方法
在swift中代理变得更加重要,当在继承代理的时候,代理的require方法必须实现,否则直接就报错。
但是这个报错一点也不友好,下面这个例子就是先写了代理,还没有实现其代理方法,引入的时候直接报错了.But,在Xcode 9版本修复这个问题,错误提示很友好了。
这报错提示“Type 'UIViewController' does not conform to protocol 'UITableViewDataSource'” 简直一脸懵逼啊,查了好久才知道原来是代理方法没有写,写了其require方法就好了。
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 5
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell: UITableViewCell = UITableViewCell.init(style: .default, reuseIdentifier: "cell")
cell.textLabel?.text = "row + \(indexPath)"
return cell
}
2.如果定义tableView是grouped类型,默认是有sectionHeader 和 sectionFooter的,即使你没有实现,也是有一个灰色View在上面。如图
这时候,你不想要header或是footerView,
1.将tableView定义成plain类型,默认就没有header和footerView了
2.实现header或footerView的高度代理方法,设置一个极小值即可
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 0.0001
}
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return 0.0001
}
3.tableView 注册cell方法
collectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: "cell")
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
或者
collectionView.register(UICollectionViewCell.classForCoder(), forCellWithReuseIdentifier: "cell")
tableView.register(UITableViewCell.classForCoder(), forCellReuseIdentifier: "cell")
暂不知道什么区别,都可以好像。 自定义cell注册的时候好像就要用self了。
Swift懒加载
需要的时候初始化内存,对内存开销较小,节省内部资源
代码初始化放在一起,代码块比较好划分,方便别人和自己阅读
它本质在siwft中确实是一个闭包,执行顺序是这样的,如果这个lazy修饰的变量没值,就会执行闭包中的东西,不是每次都执行(本人补充:这也就是为什么在Swift中的懒加载没有oc中判断。if(xx==nil){初始化xx}的代码段)。
lazy var label: UILabel = {
let label = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 40))
label.text = "Test"
label.font = UIFont.systemFont(ofSize: 14.0)
label.textColor = UIColor.red
return label
}()
swift中对基本知识的要求更高了,基本知识必须掌握牢。
因为这里对了好多安全机制,有些异常不会报错,但是就是不会出你要的结果,很难排查,所以要有更好的基础知识。
遇见的小坑,以后慢慢填坑。。