动态加载控制器
前提条件: 在实际开发中,经常会碰到一个需求是这样,当遇到节假日的时候,tabbar上的图片和标题都需要做相应的更换,节假日一过,就换回来。更过分的是,连tabbar上展示的控制器ViewController都要求更换。这样的话,就需要跟服务器配合,写一个接口,每次打开APP的时候,请求一下这个接口,以JSon的格式返回需要展示的控制器以及相应的标题名和图片名。
举个例子,传过来的json大体如下:
[
{
"vcName":"HomeViewController"
"title":"首页"
"imageName":"home_img"
},
{
"vcName":"MesagViewController"
"title":"资讯"
"imageName":"zixun_img"
},
{
"vcName":"FindViewController"
"title":"发现"
"imageName":"find_img"
},
{
"vcName":"MeViewController"
"title":"我"
"imageName":"me_img"
}
]
上面就算第一步请求json数据吧,下面第二步把json转换成array:
//因为拿到的json一般是字符串类型的,先转成data
let jsonData = jsonString.data(using: .utf8)
do {
//写这个方法的时候,提示后面跟了个 throw 。表示这个语句是必须要抛异常的,也就是必须写明如果执行不成功的话,要做什么操作。所以用 do catch 语法。
let arr = try JSONDecoder().decode(Array<Dictionary<String, String>>.self, from: data!)
}catch {
//这里写上面do执行不成功后的操作。按当前举的例子的需求,如果动态请求控制器不成功的话,这里写本地写死的控制器
print(error.localizedDescription)
}