Swift
相關(guān)知識(shí):
swift支持方法的重載
方法的重載:方法名稱相同灵临,但是參數(shù)不同。包括:
- 參數(shù)的類型不同
- 參數(shù)的個(gè)數(shù)不同
override func viewDidLoad() {
super.viewDidLoad()
// 1.獲取json文件路徑
guard let jsonPath = Bundle.main.path(forResource: "MainVCSettings.json", ofType: nil) else{
print("沒有獲取到對(duì)應(yīng)的文件路徑")
return
}
// 2.讀取json文件中的內(nèi)容
guard let jsonData = NSData(contentsOfFile: jsonPath) else{
print("沒有獲取到j(luò)son文件中的數(shù)據(jù)")
return
}
// 3.將Data轉(zhuǎn)成數(shù)組
// 如果在調(diào)用系統(tǒng)某一個(gè)方法時(shí)捣郊,該方法最后有一個(gè)throws,說(shuō)明該方法會(huì)拋出異常,那么需要對(duì)該異常進(jìn)行處理
guard let anyObject = try? JSONSerialization.jsonObject(with: jsonData as Data, options: .mutableContainers) else{
return
}
guard let dictArray = anyObject as?[[String : AnyObject]] else{
return
}
// 4.遍歷字典豺谈,獲取對(duì)應(yīng)的信息
for dict in dictArray{
// 4.1.獲取控制器對(duì)應(yīng)的字符串
guard let vcName = dict["vcName"] as? String else{
continue
}
// 4.2.獲取控制器顯示的title
guard let title = dict["title"] as? String else{
continue
}
// 4.3.獲取控制器顯示的圖標(biāo)名稱
guard let imageName = dict["imageName"] as? String else{
continue
}
// 4.4.添加子控制器
addChildViewController(childVCName: vcName, title: title, imageName: imageName)
}
}
// 方法重載
// private:私有比藻,在當(dāng)前文件中可以訪問(wèn)铝量,但是其他文件不能訪問(wèn)
private func addChildViewController(childVCName : String, title : String, imageName : String) {
//// NSClassFromString("這里的名字應(yīng)該是SwiftSHWB.HomeViewController") // 根據(jù)字符串獲取對(duì)應(yīng)的Class:命名空間+.ViewController的名字
// 1.獲取命名空間
guard let nameSpace = Bundle.main.infoDictionary!["CFBundleExecutable"] as?String else{
print("沒有命名空間")
return
}
// 2.根據(jù)字符串獲取對(duì)應(yīng)的Class
guard let ChildVCClass = NSClassFromString(nameSpace + "." + childVCName) else {
print("沒有獲取到字符串對(duì)應(yīng)的Class")
return
}
// 3.將對(duì)應(yīng)的AnyObject轉(zhuǎn)成控制器的類型
guard let childVCType = ChildVCClass as? UIViewController.Type else {
print("沒有獲取對(duì)應(yīng)控制器的類型")
return
}
// 4.創(chuàng)建對(duì)應(yīng)的控制器對(duì)象
let childVC = childVCType.init()
// 5.設(shè)置子控制器的屬性
childVC.title = title
childVC.tabBarItem.image = UIImage(named: imageName)
childVC.tabBarItem.selectedImage = UIImage(named: "\(imageName)_highlighted")
// 6.包裝導(dǎo)航控制器
let childNav = UINavigationController(rootViewController: childVC)
// 7.添加控制器
addChildViewController(childNav)
}
MainVCSettings.json文件
[
{
"vcName": "HomeViewController",
"title": "首頁(yè)",
"imageName": "tabbar_home"
},
{
"vcName": "MessageViewController",
"title": "消息",
"imageName": "tabbar_message_center"
},
{
"vcName": "DiscoverViewController",
"title": "廣場(chǎng)",
"imageName": "tabbar_discover"
},
{
"vcName": "ProfileViewController",
"title": "我",
"imageName": "tabbar_profile"
}
]