Swift开发之命名空间

  • 利用快捷键快速创建文件

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


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

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

Swift开发之命名空间_第2张图片
  • Swift动态命名空间地址
Swift开发之命名空间_第3张图片

Swift开发之命名空间_第4张图片
  • 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开发之命名空间)