SetKit 0.0.4

SetKit 0.0.4

Alex Kabanov 维护。



SetKit 0.0.4

SetKit

CI Status Version License Platform

关于

SetKit是一个强大且直观的Swift库,旨在以声明性和简洁的方式简化配置和自定义UIKit元素的过程。使用此库,您可以轻松创建美观且复杂的用户界面,提高代码的可读性和可维护性。

关键特性

  • 声明式语法:SetKit允许您使用干净和表达性的声明式语法定义和配置UIKit元素。您不必编写冗长的命令式代码,只需简单描述您想要的内容,库将为您处理余下的工作。
  • 直观API:该库提供直观的API用于设置属性,如字体、颜色和动画。您可以清晰和结构化地指定这些属性,从而使代码更具可读性。
  • 可重用组件:通过声明式地定义它们来创建可重用的UI组件。这促进了代码的可重用性和模块化,因为您可以将复杂的UI元素封装在易于共享的组件中。
  • 支持UIKit元素:您可以使用SetKit与各种UIKit元素一起使用,包括标签、按钮、文本视图、图像视图等等。它与您现有的基于UIKit的项目无缝集成。
  • 轻松的约束管理:SetKit简化了创建和管理布局约束的过程,允许您轻松定义UI元素的定位和大小。无论是指定自动布局规则还是利用SnapKit的强大功能,SetKit都能简化约束处理,以实现无缝和响应灵敏的用户界面。

示例

要运行示例项目,请先克隆存储库,然后从示例目录中运行pod install

要求

iOS 13.0+ Xcode 11.0+ Swift 5.0+

安装

SetKit可通过CocoaPods获得。要安装它,只需将以下行添加到您的Podfile

  • 基本版本:这是SetKit的基本版本,提供了一个声明式的方法来定制UIKit元素。
target '<Your Target Name>' do
    pod 'SetKit/Base', '~> 1.0.0'
end
  • SnapKit版本:这是SetKit的增强版本,利用SnapKit的功能,提供了一个具有丰富功能和声明式方法的UIKit元素定制方法,并提供了高级约束管理。
target '<Your Target Name>' do
    pod 'SetKit/SnappySetKit', '~> 1.0.0'
end

然后,运行以下命令

$ pod install

代码示例

import SetKit

final class ViewController: UIViewController {
  
  private let circleContainer = UIView()
  private let titleLabel = UILabel()
  private let nextButton = UIButton()
  
  override func viewDidLoad() {
    super.viewDidLoad()
    setupUI()
  }
  
  override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    circleContainer.set
      .corners(.circle)
  }
    
  private func setupUI() {
    view.set
      .backgroundColor(.white)
      // instead of using `.subview(of: view)` each time you can go with this:
      .subviews(circleContainer, titleLabel, nextButton)
      
    circleContainer.set
      .subview(of: view)
      // If SnappySetKit version is installed:
      .constraints { make in
        make.center.equalToSuperview()
        make.size.equalTo(40)
      }
      .backgroundColor(.systemBlue)
    
    titleLabel.set
      .subview(of: view)
      // If SnappySetKit version is installed:
      .constraints { make in
        make.top.equalToSuperview().offset(10)
        make.horizontalEdges.equalToSuperview().inset(10)
      }
      .opaque(false)
      .text("Foo")
      .textColor(.white)
      .font(.systemFont(ofSize: 10))
      .multiline()
    
    nextButton.set
      .subview(of: view)
      // If SnappySetKit version is installed:
      .constraints { make in
        make.bottom.equalToSuperview().offset(-10)
        make.width.equalTo(view.snp.width).multipliedBy(0.7)
      }
      .backgroundColor(.systemBlue)
      .corners(.roundedRect(12))
      .title("Done")
      .titleColor(.green)
      .titleLabelProperties { set in
        set
          .font(.systemFont(ofSize: 10, weight: .semibold))
      }
      .tap(self, action: #selector(buttonTapped))
  }
  
  @objc private func buttonTapped() {
    // do smth
  }
}

自定义扩展

您可以通过扩展PropertySetter来创建像这样的通用UI元素

extension PropertySetter where Base: UILabel {
  
  @discardableResult
  func personInfoLabelStyle(info: String) -> Self {
    base.set
      .text(info)
      .font(.systemFont(ofSize: 15))
      .textColor(.systemBlue)
      .borderWidth(1)
      .borderColor(.systemBlue)
      .alpha(0.7)
    return self
  }
  
}

然后像使用任何其他PropertySetter一样使用它

...
    override func viewDidLoad() {
        super.viewDidLoad()
        nameLabel.set
          .personInfoLabelStyle(info: "Alex")
    }
...

作者

camel-cased,[email protected]

许可

SetKit可在MIT许可下使用。有关更多信息,请参阅LICENSE文件。