Swift开发之命名空间

作者: Z了个L | 来源:发表于2016-04-02 16:36 被阅读165次
  • 利用快捷键快速创建文件

/*
command + j -> 定位到目录结构
⬆️⬇️键选择文件夹
按回车 -> command + c 拷贝文件名称
command + n 创建文件
*/


// 设置当前控制器对应tabBar的颜色
// 注意: 在iOS7以前如果设置了tintColor只有文字会变, 而图片不会变
tabBar.tintColor = UIColor.orangeColor()
  • 修改命名空间地址
  • 默认情况下,命名空间就是项目的名称,但是命名空间是可以修改的

  • 打印Swift对象有命名空间限制

  • Swift动态命名空间地址

  • Swift动态获取命名空间

    // 1.动态获取命名空间
    let ns = NSBundle.mainBundle().infoDictionary!["CFBundleExecutable"] as! String


    /**
     初始化子控制器
     - parameter childController: 需要初始化的子控制器
     - parameter imageName:       子控制器的图片名称
     - parameter title:           子控制器的标题
     */
    private func addChildViewController(childControllerName: String, imageName : String, title:String) {
        // 1.动态获取命名空间
        let ns = NSBundle.mainBundle().infoDictionary!["CFBundleExecutable"] as! String
        // 2.将字符串转换为类
        // 默认情况下,命名空间就是项目的名称,但是命名空间是可以修改的
        let cls:AnyClass? = NSClassFromString(ns + "." + childControllerName)!
        // 3.通过类创建对象
        // 3.1将AnyClass转换为指定的类型
        let vcCls = cls as! UIViewController.Type
        // 3.2通过class创建对象
        let vc = vcCls.init()
        // 1.1设置首页对应的数据
        vc.tabBarItem.image = UIImage(named: imageName)
        vc.tabBarItem.selectedImage = UIImage(named: imageName + "_highlighted")
        vc.title = title
        // 1.2.给首页包装一个导航控制器
        let nav = UINavigationController()
        nav.addChildViewController(vc)
        // 3.将导航控制器添加到当前控制器
        addChildViewController(nav)
    }

  • try : 发生异常会跳到catch中继续执行

  • try! : 发生异常程序直接崩溃

  • 在Swift中, 如果需要遍历一个数组, 必须明确数据的类型

  • 从字典里面取值,可以有值,可以为nil,所以返回值是可选类型

  • 如何加载json数据


    // 1.获取json文件的路径
    let path = NSBundle.mainBundle().pathForResource("MainVCSettings.json", ofType: nil)
    // 2.通过文件路径创建NSData
    if let jsonPath = path {

        let jsonData = NSData(contentsOfFile: jsonPath)

        do {

            // 有可能发生异常的代码放到这里
            // 3.序列化json数据 --> Array
            // try : 发生异常会跳到catch中继续执行
            // try! : 发生异常程序直接崩溃
            let dictArr = try NSJSONSerialization.JSONObjectWithData(jsonData!, options: NSJSONReadingOptions.MutableContainers)

            // 4.遍历数组,动态创建控制器
            // 在Swift中, 如果需要遍历一个数组, 必须明确数据的类型
            for dict in dictArr as! [[String : String]]
            {
                // 报错的原因是因为addChildViewController参数必须有值, 但是字典的返回值是可选类型
                addChildViewController(dict["vcName"]!, imageName: dict["imageName"]!, title: dict["title"]!)
            }

        } catch {
            print(error)

            // 从本地创建控制器
            // 1.创建首页
            addChildViewController("HomeTableViewController", imageName: "tabbar_home", title: "首页")

            // 1.创建消息
            addChildViewController("MessageTableViewController", imageName: "tabbar_message_center", title: "消息")

            // 1.创建发现
            addChildViewController("DiscoverTableViewController", imageName: "tabbar_discover", title: "发现")

            // 1.创建我
            addChildViewController("ProfileTableViewController", imageName: "tabbar_profile", title: "我")

        }


    }


  • 从iOS7开始就不推荐大家在viewDidLoad中设置frame
  • 注意: 监听按钮点击的方法不能是私有方法

    /**
     监听加号按钮点击
     注意: 监听按钮点击的方法不能是私有方法
     按钮点击事件的调用是由 运行循环 监听并且以消息机制传递的,因此,按钮监听函数不能设置为 private
     */
    func composeBtnClick(){
        print(__FUNCTION__)
    }

相关文章

  • Swift开发之命名空间

    利用快捷键快速创建文件 修改命名空间地址 默认情况下,命名空间就是项目的名称,但是命名空间是可以修改的 打印Swi...

  • iOS开发之swift命名空间

    导语 命名空间(namespace)想必对于有开发经验的同学来说不会陌生,swift里面引入了这一语言特性,这篇文...

  • Swift中String转Class类名

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

  • iOS Swift命名空间

    Swift的命名空间是以模块来划分的,一个模块表示一个命名空间,我们进行APP开发是,默认添加到主target的内...

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

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

  • Swift命名空间

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

  • Swift - 命名空间

  • Swift 命名空间

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

  • swift命名空间

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

  • Swift添加命名前缀

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

网友评论

    本文标题:Swift开发之命名空间

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