SwiftUtilsKit 1.2.4

SwiftUtilsKit 1.2.4

Jáder Nunes 维护。



  • 作者:
  • Jáder Nunes

Swift 工具集

主题

通用

系统信息


  • var appVersionAndBuild: String { get }

    let system = SystemInfo()
    //App version: 1.0.0
    //Build number 1
    system.appVersionAndBuild //"1001"
  • var appVersion: String { get }

    let system = SystemInfo()
    //App version: 1.0.0
    system.appVersion //"1.0.0"
  • var appBuild: String { get }

    let system = SystemInfo()
    //App build: 1
    system.appVersion //"1"

本地化


  • static func string(key: String, bundle: Bundle = .main) -> String

    Localize.string(key: "home_title")

扩展

集合


  • var isNotEmpty: Bool { get }

    let array = [String]()
    array.isNotEmpty
  • subscript (safe index: Index) -> Element?

    let array = ["John", "Mary"]
    array[safe: 0] // John
    array[safe: -1] // nil

数据


  • func decoded<T: Decodable>(as type: T.Type, using decoder: JSONDecoder = .defaultDecoder()) throws -> T

    struct People: Decodable { 
        ...
    }
    
    let data = Data()
    data.decoded(as: People.self)

日期


默认格式选项

  •  * "yyyy-MM-dd hh:mm:ss"
     * "yyyy-MM-dd"
     * "MMMM, yyyy"
     * "MM, yyyy"
    
  • func day(calendar: Calendar = .current) -> Int

    // returns a number
    Date().day()
  • func toString(format: String = DateFormatType.serverShort.rawValue, dateFormatter: DateFormatter = .defaultFormatter()) -> String

    Date().toString() //it uses: .serverShort
  • func toFormat(_ format: String = DateFormatType.serverShort.rawValue) -> Date?

    //when we want to convert a date from Presentation to Infrastructure layer or vice versa
    Date().toFormat("yyyy")
  • func dayWihSuffix(calendar: Calendar = .current) -> String

    "2024-03-05"
        .toDate()
        .dayWihSuffix() // returns: "5th"

日期格式化器


这是重要用法,因为为了保持一致性,整个应用中应使用相同的格式化器。

  • static func defaultFormatter(dateFormat: String = DateFormatType.serverLong.rawValue) -> DateFormatter

    DateFormatter.defaultFormatter()

字典


  • func toData() -> Data?

    let dict: [String: Any] = ["id": 1, "name": "John"]
    dict.toData()

可编码


  • struct People: Encodable { 
        let id: Int
    }
  • func toData(encoder: JSONEncoder = .defaultEncoder()) -> Data?

    let people = People(id: 1)
    people.toData()
  • func toJson(encoder: JSONEncoder = .defaultEncoder()) -> [String: Any]?

    let people = People(id: 1)
    people.toJson() //["id": 1]

JSON 解码器


  • static func defaultDecoder(dateFormatter: DateFormatter = .defaultFormatter()) -> JSONDecoder

    JSONDecoder.defaultDecoder()

JSON 编码器


  • static func defaultEncoder(dateFormatter: DateFormatter = .defaultFormatter()) -> JSONEncoder

    JSONEncoder.defaultDecoder()

NSObject


当我们在 TableViews 中注册单元格时,这是一个很好的选项。

  • let tableView = UITableView(...)
    tableView.register(PeopleTableViewCell.self, 
                       forCellReuseIdentifier: PeopleTableViewCell.className)
  • static var className: String { get } var className: String { get }

    final class PeopleTableViewCell: NSObject {
        ...
    }
    
    PeopleTableViewCell.className
    //or
    let cell = PeopleTableViewCell(...)
    cell.className
  • func asKind<T>(of: T.Type) -> T?

    final class PeopleViewController: UIViewController { ... }
    let anyObject: NSObject = PeopleViewController()
    anyObject.asKind(of: UIViewController.self)

字符串


  • func removeCharacters(_ characters: [Character] = defaultCharactersToRemove) -> String

    let word = "*4 . john"
    word.removeCharacters() //*4john
    //or
    word.removeCharacters([" ",".", "*", "4"]) //john
  • func onlyNumbers() -> String

    "1b2c3d".onlyNumbers() //"123"
  • func toDate(format: String = DateFormatType.showShort.rawValue, dateFormatter: DateFormatter = .defaultFormatter()) -> Date?

    • 第 1 选项

      "March, 2024".toDate()
    • 第 2 选项

      let formatter = DateFormatter()
      formatter.dateFormat = "dd-MM-yyyy"
      "25-03-2024".toDate(dateFormatter: formatter) //succeed

UIColor


  • convenience init?(hex: String)

    let color = UIColor(hex: "#AABBCC") //succeed
    let color = UIColor(hex: "AABBCC") //succeed

UIFont


  • static func custom(family: String, size: CGFloat, defaultFont: UIFont = defaultFont) -> UIFont

    UIFont.custom(family: "font_name_on_info.plist", size: 12)

UIView


  • var isVisible: Bool { get set }

    UIView().isVisible = true
    UIView().isHidden = true
  • func clipAsCircle() -> UIView

    let view = UIView()
    view.clipAsCircle()
  • func cornerRadius(value: CGFloat) -> UIView

    let view = UIView()
    view.cornerRadius(radius: 5.0)
  • func cornerRadius(radius: CGFloat, cornerMask: CACornerMask) -> UIView

    let view = UIView()
    view.cornerRadius(radius: 5.0, cornerMask: [.layerMaxXMaxYCorner])
  • func configureBorder(color: UIColor = UIColor.lightGray, thickness: CGFloat = 0.5, cornerRadius: CGFloat = 0) -> UIView

    let view = UIView()
    view.configureBorder()
  • func addShadow(color: UIColor = .black, opacity: Float = 0.2, shadowRadius: CGFloat = 2, offset: CGSize = .init(width: -0.05, height: 0.05), cornerRadius: CGFloat = 4) -> UIView

    let view = UIView()
    view.addShadow()
  • func addGradient(colors: [UIColor], flow: ColorFlow = .leftRight) -> UIView

    let view = UIView()
    view.addGradient(colors: [.red, .blue, .orange])
  • func centerInSuperview()

    let view1 = UIView()
    let view2 = UIView()
    
    view1.addSubview(view2)
    view2.centerInSuperview()
  • func anchor(_ view: UIView, distance: CGFloat = 8)

    let view1 = UIView()
    let view2 = UIView()
    
    view1.anchor(view2)