R.Swift使用

R.Swift 高效引用资源文件

R.swift 介绍

  • R.Swift 是一款基于 Swift 平台,针对 iOS 以及 tvOS 开发的资源引用框架
  • 避免使用字符串来构造某些资源实例
  • R.Swift 能够使用类似语法 R.资源类型.资源名称 来对某资源进行引用构建
  • R.Swift 有着动态生成代码的机制, 它具有以下优点:
    • 代码自动补全:就像输入其他的代码一样,R.Swift 支持 IDE 的代码自动补全
    • 自动检测: 可以自动检测代码是否存在问题, 当我们的资源文件名修改的时候, 这是就会提示资源引用错误

R.swift 安装配置

  1. 安装
    • CocoaPods pod 'R.swift' 安装
  2. 配置
    1. Build Phases -> New Run Script Phase (-> 重命名为 R.swift)
    2. 将 👆 添加的 Run Script 拖动到 Check Pods Manifest.lock 下面
    3. 添加脚本
      "$PODS_ROOT/R.swift/rswift" generate "$SRCROOT/R.generated.swift"
    4. Input Files 下面添加 $TEMP_DIR/rswift-lastrun
    5. Output Files 下面添加 $SRCROOT/R.generated.swift
    6. Command+B 编译项目,在项目代码目录下,会生成一个 R.generated.swift 的文件,将它拖如项目中
  3. 注意事项
    • 不要勾选 Copy items if needed 选项,因为每次编译都会生成新的 R.generated.swift 文件,copy 的话,旧的 R.generated.swift 将不会被覆盖
    • 每当我们修改了资源,我们需要 Command + B 来编译一下项目从而让 R.Swift 自动进行配置更新
    • .gitignore 添加 *.generated.swift 避免不必要的麻烦
  4. 如果想自定义位置存放 R.generated.swift
    • 当按照上面配置安装 Build 后成功生成 R.generated.swift 文件后
    • 拖动 R.generated.swift 到逆向存放的位置
    • 修改脚本
      "$PODS_ROOT/R.swift/rswift" generate "$SRCROOT/(路径)/R.generated.swift"
    • 修改 Output Files $SRCROOT/(路径)/R.generated.swift
    • 删除项目 R.generated.swift,重新添加
    • 在此 Build 即可

R.swift 使用

  1. 图片

    1
    2
    3
    4
    //传统方式
    let oldImage = UIImage(named: "yellow-image")
    //R.Swift方式
    let newImage = R.image.yellowImage()
  2. 字体

    1
    2
    3
    4
    //传统方式
    let lightFontTitle = UIFont(name: "Acme-Light", size: 22)
    //R.Swift方式
    let lightFontTitle = R.font.acmeLight(size: 22)
  3. 数据文件

    1
    2
    3
    4
    5
    6
    7
    //传统方式
    let jsonData = Bundle.main.path(forResource: "menuList", ofType: "json")
    let jsonUrl1 = Bundle.main.url(forResource: "menuList", withExtension: "json")

    //R.Swift方式
    let jsonData2 = R.file.menuListJson.path()
    let newUrl = R.file.menuListJson()
  4. Storyboards

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    //传统方式
    let nibVC1 = UIStoryboard(name: "NibHome", bundle: nil).instantiateInitialViewController() ?? UIViewController()

    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let initialTabBarController = storyboard.instantiateInitialViewController() as? UITabBarController
    let settingsController = storyboard.instantiateViewController(withIdentifier: "settingsController") as? SettingsControllerSettingsController


    //R.Swift方式
    let nibVC = R.storyboard.nibHome().instantiateInitialViewController() ?? UIViewController()

    let storyboard = R.storyboard.main()
    let initialTabBarController = R.storyboard.main.initialViewController()
    let settingsController = R.storyboard.main.settingsController()
  5. Nibs

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    //传统方式
    let nameOfNib = "CustomView"
    let customViewNib = UINib(nibName: "CustomView", bundle: nil)
    let rootViews = customViewNib.instantiate(withOwner: nil, options: nil)
    let customView = rootViews[0] as? CustomView

    let viewControllerWithNib = CustomViewController(nibName: "CustomView", bundle: nil)


    //R.Swift方式
    let nameOfNib = R.nib.customView.name
    let customViewNib = R.nib.customView()
    let rootViews = R.nib.customView.instantiate(withOwner: nil)
    let customView = R.nib.customView.firstView(owner: nil)

    let viewControllerWithNib = CustomViewController(nib: R.nib.customView)
  6. cell复用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    //传统方式
    let cellNib = UINib(nibName: "NibTableViewCell", bundle: nil)
    tableView.register(cellNib, forCellReuseIdentifier: "NibTableViewCell")

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "NibTableViewCell", for: indexPath)
    cell?.leftLabel.text = dataArr[indexPath.row]
    return cell ?? UITableViewCell()
    }


    //R.Swift方式
    tableView.register(R.nib.nibTableViewCell(), forCellReuseIdentifier: R.nib.nibTableViewCell.name)

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: R.nib.nibTableViewCell.name, for: indexPath) as? NibTableViewCell
    cell?.leftLabel.text = dataArr[indexPath.row]
    return cell ?? UITableViewCell()
    }


-------------The End-------------

本文标题:R.Swift使用

文章作者:kysonyangs

发布时间:2019年08月12日 - 20:08

最后更新:2020年05月16日 - 13:05

原始链接:https://kysonyangs.github.io/default/R.Swift使用/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。