阅读 FengNiao 源码 的一些收获

2019-01-08  本文已影响0人  jianshudxw

前言

网上看到喵神的一个开源代码,目前,我们工程还未全部 swift 化,就 git 下来看看源码,向大神学习写代码。简单分析哦,不求全面,想到啥就写啥,能力有限,如有错误,烦请指导指导。

第一个引起我注意的是 enum 使用

相对 oc 的enum swift 更强大,官方文档 看完是头大哈哈,或者说是看完了无感。
enum 拥有了像 类 一样的 很多功能,能够封装属性和提供方法了。

enum FileType {
    case swift
    case objc
    case xib
    case plist
    case pbxproj
    
    init?(ext: String) {
        switch ext {
        case "swift": self = .swift
        case "h", "m", "mm": self = .objc
        case "xib", "storyboard": self = .xib
        case "plist": self = .plist
        case "pbxproj": self = .pbxproj
        default: return nil
        }
    }
    
    func searchRules(extensions: [String]) -> [FileSearchRule] {
        switch self {
        case .swift: return [SwiftImageSearchRule(extensions: extensions)]
        case .objc: return [ObjCImageSearchRule(extensions: extensions)]
        case .xib: return [XibImageSearchRule()]
        case .plist: return [PlistImageSearchRule(extensions: extensions), PlistAppIconSearchRule(extensions: extensions)]
        case .pbxproj: return [PbxprojImageSearchRule(extensions: extensions)]
        }
    }
}

如果在OC 的时候,我是怎么样实现这样的功能的呢?

协议也可以扩展,并能添加实现方法

struct 编译器会自动生成 memberwise 的初始化器

谈谈整体代码结构

业务需求

结构实现

  1. 输入参数的人性化处理
  2. 用一个库Kit 将通用代码封装起来
  3. 根据目录,资源后缀查找文件,业务简单直接处理
  4. 在查询文件中,搜索关键字:资源文件名称,这一业务比较复杂:

struct or class

这里的业务都是处理都是独立完成,不需要在不地方访问修改以前的类,用struct 更好。

测试,用了个测试框架,目前没细看

上一篇 下一篇

猜你喜欢

热点阅读