bais-ios 1.0.1

bais-ios 1.0.1

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最新发布2019年12月
SPM支持 SPM

Mioke 维护。



bais-ios 1.0.1

  • 作者:
  • Mioke Klein

SwiftArchitectureWithPOP

一个使用 Swift 和协议驱动的基架结构。

安装

使用 CocoaPods
pod 'bais-ios'
# or choose on your need
pod 'bais-ios/Persistance'
pod 'bais-ios/Networking'
pod 'bais-ios/RxExtension'
手动操作

下载 .zip 包,并将 swiftAchitecture/Base 目录复制到您的项目中。

提供内容

网络

  • 服务器

    提供一个服务器的基本功能,如在线URL、离线URL、isOnline等。在测试模式下,使服务器离线。

  #if DEBUG
    Server.online = false
  #endif

现在您可以为处理响应数据自定义操作,只需从Server派生并遵守ServerDataProcessProtocol协议即可。

func handle(data: Any) throws -> Void {
    
    if  let dic = data as? [String: Any],
        let errorCode = dic["error_code"] as? Int,
        errorCode != 0 {
        throw NSError(domain: kYourErrorDomain, code: errorCode, userInfo: [NSLocalizedDescriptionKey: message])
    }
}
  • ApiManager

    现在您可以使用ApiManager管理请求,只需从BaseApiManager派生并遵守ApiInfoProtocol协议。只需提供一些关于API的信息并设置回调位置,您就已经完成了API的配置。

    var apiVersion: String {
        get { return "v2" }
    }
    var apiName: String {
        get { return "user/login" }
    }
    var server: Server {
        get { return mainServer }
    }

BaseApiManager提供了一些基本方法,例如

  public func loadData(with params: [String: Any]?) -> Void

设置用于接收原始数据成功或失败时出错的对象

  extension ViewController: ApiCallbackProtocol {
    
      func ApiManager(apiManager: BaseApiManager, finishWithOriginData data: AnyObject) {
        
          if let apiManager = apiManager as? ApiLogin {
              print("login success: \n \(apiManager.originData())")
          }
      }
    
      func ApiManager(apimanager: BaseApiManager, failedWithError error: NSError) {
          
          if apiManager is ApiLogin {
              Log.debugPrint("login failed with error: \(error)")
          }
      }
  }

或者使用链式语法

api.loadData(with: nil).response({ (api, data, error) in
  if let error = error {
    // deal error
  }
  if let data = data {
    // do response if have data
  }
})
  • Rx支持

ApiManager为您提供了一个Observable,您可以对它进行转换或将它直接绑定到某个地方。

api.rx.loadData(with: params)
    .flatMap {
        ...
        return yourResultObservable
    }
    .bind(to: label.rx.text)
    .dispose(by: bag)
  • 注意事项
  1. 请求由RequestGenerator生成,使用Alamofire请求。

持久性

  • 数据库

    与ApiManager类似,只需从KMPersistanceDatabase派生并遵守DatabaseManagerProtocol协议,提供pathdatabaseNamedatabase,您已经在项目中创建了一个新数据库。例如。

  class DefaultDatabase: KMPersistanceDatabase, DatabaseManagerProtocol {
    
    override init() {

        self.databaseName = "default.db"
        self.path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first! + "/" + self.databaseName
        self.database = FMDatabaseQueue(path: self.path)
        
        super.init()
    }
  }
  • 表和记录

    KMPersistanceTable派生并遵守TableProtocol可以让您在数据库中创建一个新表。任何符合RecordProtocol的对象都可以记录在您想要的表中。更多详细信息请参见示例。

    使用方式与以下类似

    let table = UserTable()
    let newUser = UserModel(name: "Klein", uid: 310)
    table.replaceRecord(newUser)
  • 获取

    使用DatabaseCommandCondition按条件获取数据

    let table = UserTable()
    let condition = DatabaseCommandCondition()
            
    condition.whereConditions = "user_id >= 0"
    condition.orderBy = "user_name"
            
    let result = table.queryRecordWithSelect("user_name", condition: condition)
  • 高级

    总是,数据库提供直接使用SQL进行查询或执行的方法,用于复杂的数据库操作。

  let db = DefaultDatabase()
  db.query("select * from tableDoesntExtist", withArgumentsInArray: nil)

工具和工具包

  • 自定义扩展和类别。
  • 与UI相关的类,以便轻松访问全局UI设置。
  • SystemLog可以将日志写入文件,并将其存储在沙盒中。

几乎是完成了>w<!

待办事项

  • 网络:取消缓存,将源数据转换为模型或视图数据,请求优先级。
  • API管理器中的下载和上传功能。
  • 持久性:查询后,将数据转换为模型或视图数据。
  • 动画工具包:类似TextKit的YYText等。(Bais-ios不会提供这些工具,因为基础不应该需要。)
  • 重构,更函数化和反应性。考虑使用Rx或ReactiveSwift。充分利用泛型。

许可协议

所有源代码均发布在MIT许可下。请参阅LICENSE文件以获取详细信息。