CommonKit 2.0.0

CommonKit 2.0.0

Oskari Rauta 维护。




CommonKit 2.0.0

  • Oskari Rauta

CommonKit

一个带有一些常用扩展和函数的 Swift 框架

内容

各种扩展和函数。其中一些是我编写的,一些是从网络上收集的。还有一些是变体。这个框架通过结合一些有用且常用的代码,旨在帮助您更快地开始您的项目。包括一些扩展 UILabel 的 UI 类,因为对 UILabel 的扩展无法提供这些功能。

这个框架是某些我提供的其他框架的基础,而单独使用时,它本身并不提供太多。抱歉它变得如此庞大。最初我的框架更加分散;但由于我选择的框架名称大多数已经有人使用,我决定将我的大部分工作合并到这个单独的框架中。无论如何,最终,导入一个模块而不是十个模块要容易得多...

AppLocale

自 1.2.3 版本以来,LocaleKit 框架已被合并到 CommonKit 中。LocaleKit 允许在应用程序范围内定义固定的区域设置,同时也提供了一些对 Locale 的扩展功能,以及一些简单的数据格式化选项。

NumPad

自版本1.2.4起,我的NumPad框架与CommonKit合并。NumPad是一个数字键盘(具备一些样式选项,例如手机样式),适用于iPhone和iPad。还提供了带有“完成”按钮的完整辅助视图,适用于没有“确认”按钮的键盘。下面是一个示例。

MathKit

自版本1.2.6起,MathKit框架已与CommonKit合并。

DateKit

自版本1.2.7起,DateKit框架已与CommonKit合并。DateKit包含各种日期扩展以及UTC格式下处理日期和时间的一般辅助功能。

DispatchKit

自版本1.2.7起,DispatchKit框架已与CommonKit合并。DispatchKit包含对DispatchQueue的扩展以及简单的后台任务管理。示例代码已经包含。

CurrencyKit

自版本1.2.9起,CurrencyKit框架已与CommonKit合并。CurrencyKit是一个用于Swift的钱币展示框架。

AttributedStringWrapper

looperr编写的AttributedStringWrapper很棒。我不想将其作为依赖项,因此我已经将它与本项目合并。原始代码可在此处找到:https://github.com/loopeer/AttributedStringWrapper 自版本1.3.0起合并。

FontKit

自 1.3.0 版本起,FontKit 框架已与 CommonKit 合并。FontKit 提供了对图标字体的支持。初始支持包括

  • FontAwesome5(3 种字体类型)
  • MaterialIcons
  • FoundationIcons

NumPad 类

NumPad 类为 iOS 平台提供了具有一些样式属性的 NumPad 风格键盘。类可以有以下类型之一

  • number:简单的数字输入
  • decimal:十进制数输入(添加小数点按钮)
  • phone:电话号码输入(添加“+”按钮,并在横幅模式下更改按钮外观)

NumPad 样式

NumPad 可以使用以下属性进行样式设置

  • overlayColor(视图背景)
  • backgroundColor(按钮背景)
  • backgroundColorHighlighted(按钮背景(高亮时))
  • shadowColor(按钮阴影颜色)
  • foregroundColor(按钮文本颜色)
  • foregroundColorHighlighted(按钮文本颜色(高亮时))
  • font(数字和“+/.”按钮的字体)
  • phoneFont(电话类型时按钮字体)
  • phoneCharFont(电话类型时用于字母的字体)
  • backspaceColor(退格符号颜色)

DoneBar 类

DoneBar 是一个带有向右对齐的“完成”按钮的快速 UIToolbar 初化器。

NumPad 截图

Screenshot of decimal keyboard Screenshot of phone keyboard

Landscape screenshot

使用方法

适用于UITextField或UITextView。

var tf: UITextField = UITextField(frame: .zero)
...
tf.inputView = NumPad(type: .number)
tf.inputAccessoryView = DoneBar()

步骤

  • 下载此仓库
  • 在自己的工作区中,将NumPad.xcodeproj添加到其中
  • 在自己的项目(在工作区中),将NumPad添加到其框架中。
  • 在需要NumPad的文件中添加import NumPad。

参见提供的示例。

货币

可用于

  • 带有2位数字分币等的货币的钱计算。
  • 使用区域设置显示货币价值。
  • 包含基于textfield的UI元素,允许输入货币值。
  • 还提供了一个包含价格信息的商品结构的结构。
  • 数组形式的商品作为购物车。
  • 为商品价格包含增值税计算。

它没有

  • 支持切换货币/货币汇率(100美元=100欧元=100英镑,汇率不变)
  • 支持Apple Pay或其他类似服务

如果需要更多?

查看Daniel Thorpe的Money: https://github.com/danthorpe/Money

截图(来自提供的示例)

CurrencyKit

图片中的键盘是什么?

这是由该框架提供的CurrencyPad。它可以在iPad和iPhone上同时运行。

键盘工作方式有点像计算器,我能否通过标准键盘获取光标并使其工作,或者使其体积极小一些?

当然可以,但那时您需要自行实现。目前我对它当前的实现感到满意。

用于存储金钱值的存储类型是什么?

我使用了 Decimal。并且 Money 结构体符合 Codable 协议。

能否对不同 Money 结构体求和?

是的。Money(10.0) + Money(20.0) = Money(30.0)

VAT 是否支持?

是的,在 Cart/CartItem 中。Money 总是金钱,所以它不在乎它的一部分是否用于税收或其他东西。有了 VAT,您可以获取 VAT 总额、VAT0 总额以及乘以项目数量的增值税总额。当然,还使用了 CartItem 的 VAT 百分比。

CartItem 除了价格还包含什么?

项目名称和数量。

是否精确?

我已经尽我所能提供精确的值。VAT 百分比支持 1 位小数,Money 支持 2 位小数。

我能否查看一些测试?

以下是示例应用程序的列表输出

Item1	| 15,00 €	| 1		  |  0%	| 0,00 €	| 15,00 €	| 15,00 €
Item2	| 10,00 €	| 1		  | 24%	| 2,40 €	| 10,00 €	| 12,40 €
Item3	| 15,00 €	| 2pcs	          | 24%	| 7,20 €	| 30,00 €	| 37,20 €
Item4	| 20,00 €	| 0		  |  0% | 0,00 €	|  0,00 €	|  0,00 €
Item5	| 9,00  €	| 0		  | 24%	| 0,00 €	|  0,00 €	|  0,00 €
									  									           9,60 €	| 55,00 €	| 64,60 €

它的构建方式是这样的

        var cart: Cart = Cart()
        cart.append(CartItem(name: "Item1", price: 15.0))
        cart.append(CartItem(name: "Item2", price: 10.0, VAT: 24.0))
        cart.append(CartItem(name: "Item3", count: 2, unit: "pcs", price: 15.0, VAT: 24.0))
        cart.append(CartItem(name: "Item4", count: 0, price: 20.0))
        cart.append(CartItem(name: "Item5", count: 0, price: 9.0, VAT: 24.0))

FontKit

FontKit

哇,第一个支持完整 FontAwesome v5 的框架出现了!

是真的... 但它与 v4 相比并没有好很多,v4 同样拥有大量的图标,所以如果您已经有一个使用 v4 的项目,升级到这个可能不会带来显著的变化,图标还是它们原来的样子,有时候更多并不总是更好。

还提供了什么?

  • 一个可以用来生成更多字体支持的生成器
  • 示例

通过这个可以假设你支持所有的 UI 元素吗?

抱歉,不是的 - 我只是创建了一个自定义 UILabel 子类。你可能想分叉这个并添加一些附加功能?当然很欢迎:)

可能存在一个字符串解析器,它用于解析FontAwesome风格的CSS引用到图标,并返回一个AttributedString吗?

是也不是 - 有一个解析器可以返回单个图标作为AttributedString,但您无法像这样使用它:"Text with fas-address-book picture." 这将工作: "fas-address-book"。再次,对于解决方案,也许您也可以通过分支此处来贡献?

我应该如何使用UITitleLabel

就像UILabel一样,但它有一些附加属性。查看源代码,这里是一个快速学习:UITitleLabel.title = 标签的文本部分(位于图标右侧)UITitleLabel.icon = 标签的图标部分(始终位于文本左侧)UITitleLabel.textOverflows = 一个布尔值,决定了标签内容如何显示。如果为false,文本应该始终缩进,从第一行的相同位置开始,如果有文本换行。如果为true,文本会在下一行溢出,从元素的leading坐标开始。

图标是一个兼容性类,这意味着可以有多种方式来填充它 - 提供的方式是直接指向字体->图标,以及字符串解析到字体->图标。如果这些方法不够,您还可以创建更多方法。

我应该如何将字体关联到图标?

icon = FontAwesome.brands.apple // Directly addressed
icon = "fab-apple" // String converted

Apple建议我将项目的Info.plist更改为包含字体列表,我应该立即这样做吗?

这取决于你。但如果你用这个工具(而不是直接通过 UIFont 初始化器指定字体)或者至少第一次这样访问它们,我提供了一种自动资源加载器来加载字体。如果你想直接使用,首先用下划线作为变量名初始化它们,然后它们就可以直接从 UIFont 初始化器中使用了——或者你也可以对你的 Info.plist 做适当的修改,别忘了这完全由你自己决定。

代码生成器生成了无法编译的代码!

是的——它并不完美。这只是一些启动帮助,一些图标名称可能因为 Swift 语法不允许从生成器来的名称而需要调整。我提供的枚举已经包含了必要的修改。

TableViewKit

从 1.3.2 版本开始包含。TableViewKit 对 UITableViewController、UITableViewCell 和 UITableViewDataSource 的头部做了一些改进。还增加了几个新的类:UITableViewControllerExtended 和 UITableViewCellExtended,它们提供了扩展的功能。另外还加入了一个 UITitleLabel 类,它是带有图标和标题的自定义单元格的基础。

PhotoPicker

PhotoPicker 已从 CommonKit 中移除。现在它已包含在 CommonKitPhotos 存储库中。CommonKitPhotos 位于 https://github.com/oskarirauta/CommonKit

位置支持

位置和图标配置已从 CommonKit 中移除。现在它包含在 CommonKitLocation 存储库中,也可以作为一个独立的框架使用,无需与 CommonKit 一起使用。CommonKitLocation 位于 https://github.com/oskarirauta/CommonKitLocation

ConditionalInit 协议

当您需要一个懒加载类(是的,是类,因为该类需要初始化),但又无法使用懒加载,因为您希望控制它并需要定期重置时,ConditionalInit 协议非常有用。还有其他方法可以实现这一点,例如执行懒加载的初始化器函数,但这里提供了一种不同的方法。在

    var _realVar: UIViewController? = nil
    var accessedVar: UIViewController? {
        get {
            if ( self._realVar == nil ) {
                self._realVar = UIViewController()
            }
	    return self._realVar
	}
        set { self._realVar = newValue }
    }

之后

    var _realVar: UIViewController? = nil
    var accessedVar: UIViewController? {
        get { return self._realVar.conditionalInit() }
        set { self._realVar = newValue }
    }

或者,您甚至可以为它创建一个创建函数

    var _realVar: UIViewController? = nil
    var accessedVar: UIViewController? {
        get { return self._realVar.conditionalInit{ $0?.title = "Title text" } }
        set { self._realVar = newValue }
    }

它仅扩展到可选的 NSObject 类,因此您无法将其用于非可选类。如果使用很多这些数组,则可以节省一些编写时间。自 1.4.2 版本以来引入。

还有更多吗?

是的,很多。这个库实际上相当大,包含了大量内容。

示例

示例包含在 Podfiles 中,所以请转到 examples 根目录并执行 pod install 以启用编译。

许可证

包括的资源(字体等)可能受到不同许可证的影响。一些代码,尤其是 AttributedStringWrapper,并非由我创建。它是从 loopeer 的第三方框架提供的: https://github.com/loopeer/AttributedStringWrapper 代码的一些部分可以考虑为公共领域,因为想法甚至完整的实现可能来自 StackOverFlow 等论坛。

CocoaPods

CommonKit 现在通过 CocoaPods 提供使用。以下是一个示例 Podfile

source 'https://github.com/CocoaPods/Specs.git'

# inhibit_all_warnings!
use_frameworks!

platform :ios, '13.2'
swift_version = '5.0'

target 'YOURPROJECT' do
        pod 'CommonKit', git: 'https://github.com/oskarirauta/CommonKit.git'
end