美文网首页
Swift - 命名空间

Swift - 命名空间

作者: 追梦赤子心Year | 来源:发表于2024-12-24 09:25 被阅读0次

关于命名空间,Swift与其他语言在概念上有所不同,但是共同的作用:避免命名冲突。与Objective-C更不同,因为OC就没有命名空间。
在OC中我们在创建类的时候往往都加上前缀(公司名缩写?项目名缩写?自己名字缩写?),目的一个是标记,但最主要的目的就是防止与其他框架下的代码类名冲突。因为在OC中没有命名空间,所有的代码、静态库都编译到了一起。如果引用的库中创建了两个一样名字的类,那就会冲突。
像Swift,有了命名空间,我们的每一个Target都有各自的命名空间,两个Target中,即使存在相同的类,也不会冲突。在引用其他库的时候,及时有文件名相同的文件存在,也不会因为冲突报错。

我们可以在随便一个地方,打一个断点,然后查看数据结构:

self的命名空间是target。它实际的名字是target名+文件名
对于日常开发的影响:
用swift做类似OC字符串映射的时候,我们不能直接将文件名的字符串映射成文件。因为前面多了一个命名空间
以点击tableViewCell跳往不同的页面

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        /*
         数据源
        listDic = [["vcName":"FirstVC",
                    "vcTitle":"页面一"],
                   ["vcName":"SecondVC",
                    "vcTitle":"页面二"],
                   ["vcName":"ThirdVC",
                    "vcTitle":"页面三"]]
         */
        
        // 1. 获取去命名空间,由于项目肯定有info.plist文件所有可以机型强制解包.
        guard let nameSpace = Bundle.main.infoDictionary!["CFBundleExecutable"] as? String else { return print("没有获取到命名空间")}
        print("命名空间为:",nameSpace)
        // 2. 拼写命名空间.类名(比如)
        let vcName = nameSpace + "." + listDic[indexPath.row]["vcName"]!
        print("文件名:", vcName)
        // 3. 将类名转化成类
        guard let classType = NSClassFromString(vcName) else { return print("\"\(vcName)\" is not class") }
        // 4. 将类转化成UIViewController
        guard let vcType = classType as? UIViewController.Type else { return print("\"\(vcName)\" is not UIViewController") }
        
        // 5. 用vcType实例化对象
        let vc = vcType.init()
        // 6. 跳转
        navigationController?.pushViewController(vc, animated: true)
    }

相关文章

  • Swift中String转Class类名

    String->Class Swift中引入了命名空间的概念,转Class需要拼接命名空间 注意Swift中引入了...

  • Swift学习之通过字符串创建对象

    一、swift的空间命名机制在 Swift 中,由于可以使用命名空间了,即使是名字相同的类型,只要是来自不同的命名...

  • Swift命名空间

    之前在使用RxSwfit的时候对.rx这个东西的一直有些疑问,不清楚实现原理,趁着现在有些空余时间,打算深入研究下...

  • Swift - 命名空间

  • Swift 命名空间

    Swift中新增了命名空间的概念作业:避免重复不同的项目命名空间是不一样的,默认情况下命名空间的名称就是当前项目的...

  • swift命名空间

    [TOC] 在OC中并没有命名空间,所以通过cocoapod或者静态库已经自己编写的代码,都会被编译到同一个域和二...

  • Swift添加命名前缀

    Swift命名前缀 Swift的命名空间是基于模块(module),每一个module代表了一个Swift中的一个...

  • Swift 动态获取命名空间

    在swift中有时候需要动态获取命名空间,通过命名空间创建类 这里是通过命名空间创建一个视图控制器的代码

  • swift学习之语法基础二

    命名空间 swift中引入了命名空间的概念,只要在同一个命名空间下所有的资源都是共享的,而且默认情况下项目名称就是...

  • Swift_命名空间

    作用:避免类名重复; 不同项目的命名空间是不一样的,默认情况下命名空间就是当前项目的名称; 正是因为Swift中有...

网友评论

      本文标题:Swift - 命名空间

      本文链接:https://www.haomeiwen.com/subject/tmlqsjtx.html