SetKit
关于
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文件。