swift开发的小坑

swift 几个比较好的UI库

swift UI库

1.tableView的代理方法

在swift中代理变得更加重要,当在继承代理的时候,代理的require方法必须实现,否则直接就报错。
但是这个报错一点也不友好,下面这个例子就是先写了代理,还没有实现其代理方法,引入的时候直接报错了.But,在Xcode 9版本修复这个问题,错误提示很友好了。

代理没实现.png

这报错提示“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在上面。如图

swift开发的小坑_第1张图片
sectionHeader 和 FooterView.png

这时候,你不想要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中对基本知识的要求更高了,基本知识必须掌握牢。

因为这里对了好多安全机制,有些异常不会报错,但是就是不会出你要的结果,很难排查,所以要有更好的基础知识。
遇见的小坑,以后慢慢填坑。。

你可能感兴趣的:(swift开发的小坑)