swift4 在项目中的使用Tips(一)

4 篇文章 0 订阅

前言:还记得是去年还会用swift写了一个app,如今在用Xcode9 打开,一片红呀,也run不起来了。很多语法都变了。淡淡的忧伤~~也是好长时间没写了,很多用法都忘记了。如今,计划重新写一个当前项目的swift版本,也是练练手。记录下常用的。

1、我们从后取值时,在不能确定该值是否存在时,需要 if let 下
eg:

if let count = model.auctionCount {
reserveCountLabel.text = String.init(format: “目前该产品预订人数:%d”, count)
}

2、我们在oc中使用MJExtension来将字典数组转模型数组,或者模型转字典,其中类型全部写成NSString类型都是可以的,等到用的时候再进行转换,得到的结果值也是准确的。但是在swift中,用ObjectMapper来转换时,必须将关键字的类型写准确,否则转换后的结果是空,或者不对的。我们可以在接口返回数据时,打断点,然后鼠标放在dic上会显示返回的数组及类型都可以看到的
这里写图片描述

3、在oc中我们的图片不存在,页面就是显示空白,而在swift中,则是会crash,为了防止,忘记将图片拖入,我们在给ImageView设置图片时,可以先判断下,可以给个默认图片,注意这不是从网络上获取图片的

ImageView.image = [UIImage imageName:@”xxx”];
swift中给UIImage写个extension

static func ycf_imgWithName(name: String) -> UIImage {
        let img = UIImage(named:  name)

        if img == nil {
            return UIImage.ycf_placeholderImg()
        }
        return img!
    }

4、有些func 返回值可能是nil,比如返回UIImageview的 ,应该这样写

func xxxx:(参数) -> UIImageView ? {
}

5、我们在oc中使用tag获取UIButton

UIButton btn = (UIButton )[self.view viewWithTag:325];
在swift中我们这样:
let btn: UIButton = self.view.viewWithTag(325) as! UIButton

6、在使用UICollectionViewCell时,不要将相关的view添加到self.contentView上去。直接添加到self上即可。不然有些图片显示会有问题

7、有些数据它的类型时Int64,我们在显示该数据时

var marketNumber: Int64!//商品编号
String(model.marketNumber) //此时我们是确定该marketNumber值肯定存在,直接这样显示是ok的
……
var auctionCount: Int64? //对于这种不确定的值,该如何取值呢

if let count = dic["auctionCount"] as? NSNumber {
    self.model.auctionCount = Int64(truncating: count)
 }

8、关于Bool值的

 let result = dic["result"] as! Bool

  if  result {
      //.....
  }else{
     // ....
  }

9、关于接口返回的数据,我们使用的是数组

//1、初始化
private var dataArray: Array<GoodsListModel> = Array.init()

//2、处理数据
 let dic: NSDictionary = response as! NSDictionary
 let list: [[String : Any]] = dic["data"] as! [[String : Any]]
 if list.count != 0  {
        let arr : Array<GoodsListModel> = Mapper<GoodsListModel>().mapArray(JSONArray: list)
        self.dataArray.append(contentsOf: arr)
      }

10、json 转字典

一、方法一:
 let userModel = Mapper<UserModel>().map(JSON: StaticFunction.getUserDefaultObject(CURRENT_USER_KEY) as! [String : Any])

 let clientModel = Mapper <ClientManagementModel>().map(dic);

方法二:
let model = LoginViewModel(JSON: response as! [String : Any])

字典数组转为模型数组
let users:[UserModel] = Mapper<UserModel>().mapArray(JSONArray:userArray)

11、在Mappable中

1)关于数组的写法,有如下两种,当然也可以将数组继续写成model
var mainResList: [AnyObject]?
var customResList: Array<Any>?

var user: UserModel?//用户对象2)字典的写法
var dic: [String :AnyObject] = [:]//dictionry3)发现,1、即使model中漏写了某些参数也没有关系,不会crash
            2、多写了也没事。不会crash
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值