文章

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. 配置
  3. Build Phases -> New Run Script Phase (-> 重命名为 R.swift)
  4. 将 👆 添加的 Run Script 拖动到 Check Pods Manifest.lock 下面
  5. 添加脚本 "$PODS_ROOT/R.swift/rswift" generate "$SRCROOT/R.generated.swift"
  6. Input Files 下面添加 $TEMP_DIR/rswift-lastrun
  7. Output Files 下面添加 $SRCROOT/R.generated.swift
  8. Command+B 编译项目,在项目代码目录下,会生成一个 R.generated.swift 的文件,将它拖如项目中
  9. 注意事项
    • 不要勾选 Copy items if needed 选项,因为每次编译都会生成新的 R.generated.swift 文件,copy 的话,旧的 R.generated.swift 将不会被覆盖
    • 每当我们修改了资源,我们需要 Command + B 来编译一下项目从而让 R.Swift 自动进行配置更新
    • .gitignore 添加 *.generated.swift 避免不必要的麻烦
  10. 如果想自定义位置存放 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. 数据文件 ``` //传统方式 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()

1
4. Storyboards

//传统方式 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()

1
5. Nibs

//传统方式 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)

1
6. cell复用

//传统方式 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() } ```

本文由作者按照 CC BY 4.0 进行授权