swift4 在项目中的使用Tips(一)
前言:还记得是去年还会用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] = [:]//dictionry
(3)发现,1、即使model中漏写了某些参数也没有关系,不会crash
2、多写了也没事。不会crash
上一篇: 百度:对无人驾驶投入远超200亿元
推荐阅读
-
MyBatis Generator在maven项目中使用的一些注意事项
-
vue-cli3项目中使用flexible和rem适配移动端的一些踩坑
-
初次在Rails项目中使用PostgreSQL,纪录一些简单的步骤
-
在项目中使用redis做缓存的一些思路
-
swift4 在项目中的使用Tips(一)
-
使用react-hooks及在项目中使用react-hooks遇到的一些问题的解决
-
我在一个前端项目中用js整理的一些通用方法,其中使用到的思想,主要就是约定了。...
-
[JAVA IDEA]在使用maven项目中,无法读取resources文件夹中的配置文件的一种解决方案
-
在项目中使用redis做缓存的一些思路