欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-31 17:17:43
...

前言:还记得是去年还会用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上会显示返回的数组及类型都可以看到的
swift4 在项目中的使用Tips(一)

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