2023-05-15

科普鸭


开始项目

// 同一目录,下载‘科普鸭项目’与‘flutter模块项目’,项目运行需要flutter环境
git clone git@codeup.aliyun.com:63e5a2b4ba23e3cae1fa1766/kepu/client/ios/kepuya.git
git clone git@codeup.aliyun.com:63e5a2b4ba23e3cae1fa1766/kepu/client/flutter/kepuya.git flutter_science_module

cd flutter_science_module
flutter pub get
cd kepuya
pod install
// 证书在 /kepuya/证书 目录密码123456

代码规范

  • 使用驼峰式命名,类、结构体、枚举、协议命名需要附加前缀HG
public enum HGTarget: String, CaseIterable {}
public class HGBaseViewController: UIViewController {}
  • 方法名function
func deal(with people: HGPepple, at location: HGLocation) {}
  • 权限控制
open class HGTest {
    /// open: 可以在任何地方访问,包括override和继承
    open func test() {}
    
    /// public: 可以在任何地方访问,其他module中不可以被override和继承
    public func test1() {}
    
    /// internal: 默认为internal,所修饰的属性或方法在整个模块内都可以访问
    internal func test2() {}
    
    /// fileprivate: 在当前文件内可以被访问,在子类中能访问
    fileprivate func test3() {}
    
    /// private: 在当前类中能被访问,在子类中不能访问
    private func test4() {}

    /// private(set): 外部可读,不可写
    public private(set) var value: Int?
}
  • 注释: 快捷键option + command + / (⌥ + ⌘ + /)
    /// <#Description#>
    /// - Parameters:
    ///   - a: <#a description#>
    ///   - b: <#b description#>
    /// - Returns: <#description#>
    func test(a: Int, b: Int) -> Int {
        return 1
    }
  • 闭包closure
typealias HGActionClosure = (_ item1: String, _ item2: String)->Void
func showWeather(with actionClosure: HGActionClosure) {}
  • 泛型temple通常使用全大写表示
class HGTest<MODEL> {
    func print(model: MODEL) {}
}
  • 代码规范规则与检查工具swiftlint
/// 规则
- empty_string    #优先使用isEmpty判断,而不是将字符串与空字符串文字进行比较 
- empty_count  #集合空判断,优先使用isEmpty
- discarded_notification_center_observer #当使用block注册通知中心observer的时候,应该存储函数返回的observer,以便之后的删除
- control_statement   #if-while等判断条件不要用括号括起来 (condition)
- duplicate_imports  #重复导入
- empty_parameters  #闭包参数为空时,建议使用 `() -> ` 代替 `Void ->
- explicit_init #避免直接调用init方法
- fallthrough   #switch 语句中不建议使用 fallthrough
- fatal_error_message  #fatalError 必须拥有一个 message
- file_name_no_space  #文件名不应包含任何空格
- force_cast   #不建议直接强解类型
- force_try   #避免 `try!`
- force_unwrapping  #避免强制解包
- identical_operands #比较两个相同的操作数可能是一个错误
- legacy_cggeometry_functions #避免使用 C 风格的 CG 遗留函数,使用 struct extension
- legacy_constructor  #使用 swift 提供的 struct 构造函数, 避免使用遗留的构造函数比如 CGPointMake(10, 10)
- legacy_nsgeometry_functions  #避免使用 C 风格的 NS 遗留函数,使用 struct extension
- literal_expression_end_indentation #数组和字典文字的结尾应与开始它的行具有相同的缩进
- lower_acl_than_parent #确保定义的访问控制级别低于其父级
- mark   #正确使用 mark 的格式 `// MARK: - message`
- multiline_parameters #函数和方法参数应该在同一行上,或者每行一个
- no_extension_access_modifier #在 extension 扩展前面,不建议使用 (fileprivate,public) 等修饰符
- redundant_objc_attribute  #Objective-C 属性(@objc)在声明中是多余的
- redundant_optional_initialization #不需要写默认值为 nil
- redundant_string_enum_value #字符串类型枚举,会有默认 string 值,与名字相同,不要再次设置
- redundant_void_return   #在不必要的时候, 不需要写 ->() and -> Void
- return_arrow_whitespace  #函数定义返回的 ->  前后有空格, 不换行
- switch_case_alignment    #Case 语句应与其封闭的 switch 语句垂直对齐,如果没有其他配置,则缩进
- trailing_semicolon     #行末尾不加分号
- type_name     #类型名字限制规则(类型名称应仅包含字母数字字符,以大写字符开头,长度在 3 到 40 个字符之间)
- unneeded_break_in_switch   #在 switch-case 语句中, 有方法调用或操作时,避免使用 break 语句
- unowned_variable_capture   #最好将引用捕获为弱引用以避免潜在的崩溃
- void_return    #使用 `-> Void` 代替 `-> ()
- weak_delegate #delegate 应该被设置为 weak

git管理规范

项目注意事项

需要优化问题和可以改进的地方

  • xib多人协作不方便,加载运行慢,可以考虑新功能纯代码
  • bugly用起来,监听奔溃卡顿问题
  • 项目运行需要flutter环境,可以考虑支持不需要flutter环境也能运行
  • 脚本自动化打包
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容