swift 命名空间
swift 命名空间
1、在oc中我们通过类名能非常方便的动态到创建对象。
- (id)productWithClassName:(NSString *)claName{class cla = NSClassFromString(claName);if (cla) {id obj = [[cla alloc] init];return obj;}
}
但是如果将这段代码直接转换成swift代码,一运行是会直接闪退的,因为swift中是存在命名空间的。swift中 import UIKit
等都是导入对应到命名空间,swift中同一个命名空间类是不需要 import 。swift中类的完成命名应该是”命名空间”+.
+”类名”。
下面是一个通过配置 tableView的dataSource 来跳转不同到界面
class ViewController: UIViewController {public var dataSource:[[String:String]] = [["title":"pageOne","class":"PageOneViewController"],["title":"pageTwo","class":"PageTwoViewController"]];override func viewDidLoad() {super.viewDidLoad()// Do any additional setup after loading the view, typically from a nib.self.title = "首页"let tableView:UITableView = UITableView.init(frame: self.view.bounds, style: UITableViewStyle.plain);tableView.delegate = self;tableView.dataSource = self;self.view.addSubview(tableView);}override func didReceiveMemoryWarning() {super.didReceiveMemoryWarning()// Dispose of any resources that can be recreated.}
}
extension ViewController:UITableViewDelegate,UITableViewDataSource{func numberOfSections(in tableView: UITableView) -> Int {return 1}func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {return dataSource.count}func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {var cell :UITableViewCell? = tableView.dequeueReusableCell(withIdentifier: "cellId")if cell == nil {cell = UITableViewCell.init(style: .default, reuseIdentifier: "cellId")}let dic:Dictionary = dataSource[indexPath.row]cell?.textLabel?.text = dic["title"]return cell as UITableViewCell!;}func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){tableView.deselectRow(at: indexPath, animated: true)let vcName:String = dataSource[indexPath.row]["class"]!let title:String = dataSource[indexPath.row]["title"]!// 0.获取命名空间guard let executable = Bundle.main.infoDictionary!["CFBundleExecutable"] as? String else {return}// 1.获取对应的类guard let childVcClass : AnyClass = NSClassFromString(executable + "." + vcName) else {return}let childClass = childVcClass as! UIViewController.Typelet childVc = childClass.init()childVc.title = title;self.navigationController?.pushViewController(childVc, animated: true);}
}
关键代码: 先动态取到当前项目的命名空间, 然后通过命名空间和类名拼成完整到类名
// 0.获取命名空间guard let executable = Bundle.main.infoDictionary!["CFBundleExecutable"] as? String else {return}// 1.获取对应的类guard let childVcClass : AnyClass = NSClassFromString(executable + "." + vcName) else {return}
swift 命名空间相关推荐
- ceph 面试_终于有人把Ceph分布式存储讲清楚了!
Ceph项目最早起源于Sage就读博士期间的工作(最早的成果于2004年发表),并随后贡献给开源社区.在经过了数年的发展之后,目前已得到众多云计算厂商的支持并被广泛应用.RedHat及OpenStac ...
- Ceph分布式存储详述
参考文章:Ceph分布式存储详述 - 知乎 什么是Ceph分布式存储? Ceph项目最早起源于Sage就读博士期间的工作(最早的成果于2004年发表),并随后贡献给开源社区.在经过了数年的发展之后,目 ...
- Swift中编写单例的正确方式
本文由CocoaChina译者leon(社区ID)翻译自krakendev 原文:THE RIGHT WAY TO WRITE A SINGLETON 转载请保持所有内容和链接的完整性. 在之前的帖子 ...
- Swift怎么通过类名字符串来创建一个类
##OC中可以直接通过类名的字符串转换成对应的类来操作,但是Swift中必须用到命名空间,也就是说Swift中通过字符串获取类的方式为 let namespace = NSBundle.mainBun ...
- [Swift通天遁地]七、数据与安全-(1)XML文档的创建和解析
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...
- Swift与Objective-C API交互
Swift和Objective-C可以进行互操作,也就是说可以在Objective-C项目中使用Swift代码,反过来也可以.当然,这种互操作之间最重要的是可以在Swift中调用Objective-C ...
- Swift vs. Objective-C:未来看好Swift的十个理由
是时候使用易入手又全面的 Swif 语言为 iOS 和 mac OS X 做应用开发了. 虽然编程语言不会那么容易消逝,但坚持衰落范例的开发小组正在这么做.如果你正为移动设备开发应用程序,并且你还没有 ...
- swift如何动态创建对象
前言: 在一些大型的项目中常常在加载页面的时候根据服务器请求下来的数据动态创建视图控制器对象,最近的一个项目就有这一方面的需求,加载页面之前需要先请求服务器的数据得到一个JSON字典,根据里面字符串的 ...
- Swift语言快速入门
Swift语言快速入门(首部同步新版官方API文档和语法的Swift图书,确保代码可编译,作者专家在线答疑,图书勘误实时跟进) 极客学院 编著 ISBN 978-7-121-24328-8 201 ...
最新文章
- 在一个夜黑风高的夜晚,坐在教室里学多线程
- 图文详解安装NetBackup 6.5备份恢复Oracle 10g rac 数据库(修订)
- 反距离加权插值法例题_GMS插值中的反距离权重法(Inverse distance weighted)
- SSH基本原理和免密码登录
- php网页设计设计心得体会,网页设计心得体会范文
- php 复杂数组排序,如何利用php array_multisort函数 对数据库结果进行复杂排序
- R语言与数据挖掘学习笔记(常用的包)
- 网页自动关机代码HTML,自动定时关机命令
- 谷歌地图高精度模型提取4(完结篇)
- 【IoT】STM32 启动代码汇编指令详解
- matlab乘除号怎么打,matlab中的乘除法
- VM虚拟机 Liunx修改ip地址
- Android Studio运行项目
- LeetCode - 加一
- Android开发实例详解之IMF(输入法)(Android SDK Sample—SoftKeyboard)
- Linux究竟值多少钱?
- mac macbook应用清单
- 医疗器械软件网络安全相关
- 神经网络学习笔记(五) 径向基函数神经网络
- 全局gin对象如何在子模块中修改Logger