Swift编码总结3

1.编码转换:

dataString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? ""
requestData.stringValue.removingPercentEncoding ?? ""

2.取值需要判断为空设置为空,防止取值崩溃:

                //总页数
                let totalPageCount = dicData?["recordNum"] as? String
                //菜品数据源
                var dataSource = dicData?["orderInfo"] as? [Dictionary<String,Any>] ?? [Dictionary<String,Any>]()

3.可以在UIView里添加刷新,block传递到控制器操作网络请求即可:

        //上拉加载
        historyTableView.mj_footer = MJRefreshAutoNormalFooter(refreshingBlock : {[weak self]() -> Void in
            self?.refreshBack?()
        })

4.setNeedsLayout和layoutIfNeeded区别:

不能直接调用这个方法layoutSubviews。强制刷新布局,调用 setNeedsLayout,如果想马上刷新界面,调用layoutIfNeeded

setNeedsLayout

标记为需要重新布局,不立即刷新,但layoutSubviews一定会被调用

配合layoutIfNeeded立即更新

layoutIfNeeded

如果,有需要刷新的标记,立即调用layoutSubviews进行布局

一般写在UIView动画里。

https://yiweifen.com/html/news/WaiYu/74770.html

http://ios.jobbole.com/84219/

5.for循环推荐使用:

 for (index,item) in potTaste.details.enumerated() {  }

 data.forEach { (label, model) in {  }

6.枚举不同的type,设置不同的属性:

enum ButtonName {
    case Split(String,UIColor,UIColor)                  //拆分
    case Doubly(String,UIColor,UIColor)                 //倍增
    case Delay(String,UIColor,UIColor)                  //延迟
    case SureOrder(String,UIColor,UIColor)              //确认下单
    case Rush(String,UIColor,UIColor)                   //催菜
    case Confirm(String,UIColor,UIColor)                //确认上菜
    case Gift(String,UIColor,UIColor)                   //赠菜
    case GiveBack(String,UIColor,UIColor)               //退菜
    case ChangeTableDish                                //单品转台
}

7.Cell中接受多个model可以使用元组:

typealias ModelTuple = (dishLabel: DishLabel, dishViewModel: DishViewModel)
var model: ModelTuple!

8.CollectionView 大量 Item 快速滑动时掉帧严重问题的优化:

if #available(iOS 10.0, tvOS 10.0, *) {
            collectionView?.prefetchDataSource = self
        }

9.convert。。。to。。。:

            // 将collectionView在控制器view的中心点转化成collectionView上的坐标
            var topPoint = CGPoint(x: UIScreen.main.bounds.size.width*0.5, y: NavigationBarH)
            var pInView = view.convert(topPoint, to: collectionView)

10.MJRefresh根据拖拽比例自动切换透明度:

let header = MJRefreshNormalHeader(refreshingTarget: self, refreshingAction: #selector(loadNew))
// 设置自动切换透明度(在导航栏下面自动隐藏)
header?.isAutomaticallyChangeAlpha = true;

猜你喜欢

转载自www.cnblogs.com/pengsi/p/8962264.html