AeroHelpers
一组帮助器和包装器
组成
包含三个模块
- UIViewController
- Identifiable:为视图控制器提供唯一标识符
- UIView
- LoadingIndicator:阻止用户交互的加载指示器
- XibLoadable:从xib文件加载和添加UIView的包装器
- ReuseIdentifiable:为类提供的唯一、可重用的标识符
- Int
- Declension:根据词的数量进行滚动
- String
- Html:处理html字符串的帮助器
- Marked:“染色”子字符串
- Currency:格式化和操作价格
- HEXColorable:将HEX颜色字符串转换为UIColor
- RemoveCharacters:从字符串中删除字符的包装器
要求
- iOS 10.0+
- Xcode 10.2+
- Swift 5+
安装
iPhonePods
在您的Podfile中添加以下行
pod 'AeroHelpers'
然后在您的项目文件夹的终端中执行pod install
命令。请记住,在使用前将import AeroHelpers
添加到您计划初始化库的文件中。在AeroHelpers
中包含了所有模块。然而,如果需要,也可以单独安装模块,例如
pod 'AeroHelpers/Int'
pod 'AeroHelpers/UIView'
手动
从master
分支(稳定版本)或从发布中的您感兴趣的版本下载存档。解压并将所需的模块从文件夹AeroHelpers
移动到您的项目中。
文档和示例
UIViewController
Identifiable
为view controller提供唯一的标识符。
文档
符合Identifiable协议的UIViewController
有两个属性
static var reuseIdentifier: String { get }
var reuseIdentifier: String { get }
每个属性都返回从UIViewController
继承的类名
示例和案例使用
import AEROHelpers
import UIKit
class DetalisViewController: UIViewController, Identifiable { // Обьявляем что DetalisViewController соответствует протоколу Identifiable
//...
}
...
class SomeViewController: UIViewController {
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
switch segue.identifier {
case DetalisViewController.identifier: // Id перехода на DetalisViewController соответствует классу DetalisViewController
// делаем что необходимо, внедряем в DetalisViewController, etc
default:
break
}
}
}
UIView
加载指示器
在任何视图中显示的加载指示器。
文档
每个 UIView
都会有两个方法和一个属性。
var isLoadingProgress: Bool
func showLoading(fogging: Bool = true, fogColor: UIColor? = .none, indicatorStyle: UIActivityIndicatorView.Style? = .none, indicatorColor: UIColor? = .none)
func hideLoading()
第一个方法是启动加载指示器,在整个 UIView
的 frame
上。第二个方法是停止该指示器。属性 isLoadingProgress
返回 true
时表示指示器当前处于活动状态。如果没有指定 fogColor
,则阴影颜色将是透明的浅灰色,透明度为 0.4。indicatorStyle
默认为 grey
。
通过 Appearance
(它是 LoadingIndicator
类的一个实例)可以配置以下参数:
- fogColor - 阴影颜色。
- indicatorStyle - 加载指示器样式。
- indicatorColor - 加载指示器的颜色。
示例和案例使用
import AEROHelpers
import UIKit
class ViewController: UIViewController {
@IBOutlet private var startLoadingButton: UIButton?
@IBAction private func tapStartLoadingButton() {
startLoadingButton?.showLoading()
DispatchQueue.main.asyncAfter(deadline: .now() + 5) { // или, например, запрос к серверу
self.startLoadingButton?.hideLoading()
}
}
}
配置 Appearance
的示例
LoadingIndicator.appearance().fogColor = .red
LoadingIndicator.appearance().indicatorStyle = .whiteLarge
LoadingIndicator.appearance().indicatorColor = .blue
XibLoadable
从 xib 文件加载自定义 UIView
。
文档
任何遵循 XibLoadable
协议的自定义 UIView
都已经有了一个 loadXib()
方法。这个方法会从对应类名的 xib 文件中加载视图。需要在视图初始化时调用此方法。
示例和案例使用
import AEROHelpers
import UIKit
class SomeCustomView: UIView, XibLoadable {
@IBOutlet var label: UILabel?
@IBOutlet var button: UIButton?
override init(frame: CGRect) { // при инициализации в коде
super.init(frame: frame)
loadXib()
}
required init?(coder aDecoder: NSCoder) { // при инициализации из другого xib/storyboard
super.init(coder: aDecoder)
loadXib()
}
override func awakeFromNib() {
super.awakeFromNib()
//настраиваем view...
}
}
在 SomeCustomView.xib
文件中指定 file owner: 使用这样的视图既可以与 xib/storyboard 一起使用,也可以通过代码创建和添加到视图上。
ReuseIdentifiable
为 UIView
提供唯一的标识符。
文档
主要用于 UITableViewCell
和 UICollectionViewCell
,用于注册具有 xib 文件布局的单元格,并在 UITableView
和 UICollectionView
的 cellForRow
方法中通过标识符获取单元格。任何实现 ReuseIdentifiable
协议的 UIView
将出现两个属性
static var reuseIdentifier: String { get }
var reuseIdentifier: String { get }
返回每个类的唯一标识符,名称与类名相符。
示例和案例使用
//Coming soon...
Int
变形
根据实体数量调整单词。
文档
所有整数类型的 Int
都获得了
DeclensionsVariants
结构,包含一个变体列表;defaultsDeclensions
属性,包含预置的DeclensionsVariants
列表declension
方法,执行直接变形
DeclensionsVariants
结构包含 3 个属性
- oneVariant 应包含一个符合条件的变体:被 10 除的余数等于 1(1 天,21 天,1361 天)。
- mediumVariant 应包含一个符合条件的变体:被 10 除的余数在 2 到 4 之间(包括 2 和 4)(2 天,24 天,1363 天)。
- othersVariants 应包含一个符合条件的变体:被 100 除的余数在 5 到 20 之间(包括 5 和 20),或被 10 除的余数(10 天,111 天,14 天)
defaultsDeclensions
属性返回包含现有变形类型的结构。这是
- days - 天(“一天”, “天的”, “天的”)
- seconds - 秒(“一秒”, “秒的”, “秒的”)
- stones - 石头(“一块石头”, “石头的”, “石头的”)
- products - 产品(“一个产品”, “产品的”, “产品的”)
- productsGoods - 货物(“一个货物”, “货物的”, “货物的”)
- items - 元素(“一个元素”, “元素的”, “元素的”)
示例和案例使用
// Предустановленные варианты:
print("Ждём \(23) \(12.defaultsDeclensions.seconds)") // Ждём 23 секунды
print("Доставка через \(86) \(86.defaultsDeclensions.days)") // Доставка через 86 дней
// Кастомные варианты:
let variants = Int.DeclensionsVariants("год", "года", "лет")
print("Ему \(5) \(5.declension(variants))") // Ему 5 лет
print("Где-то \(23) \(23.declension(variants)) назад") // Где-то 23 года назад
print("Спустя \(13) \(10.declension(variants))") // Спустя 13 лет
字符串
HTML
将包含 HTML 标签和 HTML 实体的字符串转换为相应的 NSAtributtedString
。
文档
扩展 String
结构,包括以下方法
- html - 尝试将含有 HTML 的字符串转换为其相应的 NSAttributedString。如果失败返回 nil。
- htmlDecoded - 尝试删除或解码所有 HTML 实体,并将 HTML 字符串转换为普通字符串。如果失败返回 nil。
- nl2br - 从字符串中删除所有
\r
字符,并将所有\n
字符替换为<br/>
标签。 - br2nl - 将字符串中的所有
<br/>
标签替换为\n
字符。
示例和案例使用
html
let htmlString = "<font style=\"font-family: Helvetica; font-size: 24pt; \">Start <br>te st<br><br> <b>bold</b> </font>"
print("\(htmlString.html!)")
结果
Start
te st
{
NSColor = "kCGColorSpaceModelRGB 0 0 0 1 ";
NSFont = "<UICTFont: 0x157e01220> font-family: \"Helvetica\"; font-weight: normal; font-style: normal; font-size: 32.00pt";
NSKern = 0;
NSParagraphStyle = "Alignment 4, LineSpacing 0, ParagraphSpacing 0, ParagraphSpacingBefore 0, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 38/0, LineHeightMultiple 0, LineBreakMode 0, Tabs (\n), DefaultTabInterval 36, Blocks (\n), Lists (\n), BaseWritingDirection 0, HyphenationFactor 0, TighteningForTruncation NO, HeaderLevel 0";
NSStrokeColor = "kCGColorSpaceModelRGB 0 0 0 1 ";
NSStrokeWidth = 0;
}bold{
NSColor = "kCGColorSpaceModelRGB 0 0 0 1 ";
NSFont = "<UICTFont: 0x157e0c870> font-family: \"Helvetica\"; font-weight: bold; font-style: normal; font-size: 32.00pt";
NSKern = 0;
NSParagraphStyle = "Alignment 4, LineSpacing 0, ParagraphSpacing 0, ParagraphSpacingBefore 0, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 38/0, LineHeightMultiple 0, LineBreakMode 0, Tabs (\n), DefaultTabInterval 36, Blocks (\n), Lists (\n), BaseWritingDirection 0, HyphenationFactor 0, TighteningForTruncation NO, HeaderLevel 0";
NSStrokeColor = "kCGColorSpaceModelRGB 0 0 0 1 ";
NSStrokeWidth = 0;
} {
NSColor = "kCGColorSpaceModelRGB 0 0 0 1 ";
NSFont = "<UICTFont: 0x157e01220> font-family: \"Helvetica\"; font-weight: normal; font-style: normal; font-size: 32.00pt";
NSKern = 0;
NSParagraphStyle = "Alignment 4, LineSpacing 0, ParagraphSpacing 0, ParagraphSpacingBefore 0, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 38/0, LineHeightMultiple 0, LineBreakMode 0, Tabs (\n), DefaultTabInterval 36, Blocks (\n), Lists (\n), BaseWritingDirection 0, HyphenationFactor 0, TighteningForTruncation NO, HeaderLevel 0";
NSStrokeColor = "kCGColorSpaceModelRGB 0 0 0 1 ";
NSStrokeWidth = 0;
}
htmlDecoded
let htmlString = "<font style=\"font-family: Helvetica; font-size: 24pt; \">Start <br>te st<br><br> <b>bold</b> </font>"
print("\(htmlString.htmlDecoded!)")
结果
Start
te st
bold
br2nl
let htmlString = "<font style=\"font-family: Helvetica; font-size: 24pt; \">Start <br>te st<br><br> <b>bold</b> </font>"
print("\(htmlString.nl2br)")
结果
<font style="font-family: Helvetica; font-size: 24pt; ">Start
te st
<b>bold</b> </font>
nl2br
let htmlString = "Start \nte st\n\n <b>bold</b>"
print("\(htmlString.br2nl)")
结果
Start <br/>te st<br/><br/> <b>bold</b>
Marked
使用颜色和字体突出显示子字符串。
文档
结构扩展 String
包含以下方法 markSubstrings
func markSubstrings(_ markedSubstrings: [String],
mainFont: UIFont = .systemFont(ofSize: UIFont.systemFontSize),
mainColor: UIColor = .darkText,
markFont: UIFont = .systemFont(ofSize: UIFont.systemFontSize),
markColor: UIColor = .blue,
isOnlyFirst: Bool = false) -> NSAttributedString?
除了 markedSubstrings
之外,所有参数都是可选的。
输入参数
- markedSubstrings:需要突出的子字符串列表;
- mainFont:主要字体,默认为系统字体,系统大小;
- mainColor:主要文本颜色,默认为
darkText
; - markFont:突出显示子字符串的字体,默认与主要文本字体相同;
- markColor:突出显示子字符串的颜色,默认为蓝色;
- isOnlyFirst:如果值为
true
,则将突出显示所有子字符串的出现,否则仅突出显示第一个找到的。默认为false
。
通过 Appearance
类的 MarkedSubstrings
类可以设置以下参数
- mainFont.
- mainColor.
- markFont.
- markColor.
示例和案例使用
let testString = "Test with test for test if testing is available."
let markedString = testString.markSubstrings(["test"])
print("\(markedString)")
let testString = "Test with test for test if testing is available."
let font = UIFont(name: "Futura-Bold", size: 24)
let markedString = testString.markSubstrings(["test"], markFont: font!, markColor: .red, isOnlyFirst: true)
print("\(markedString)")
配置 Appearance
的示例
MarkedSubstrings.appearance().mainFont = .systemFont(ofSize: 20)
MarkedSubstrings.appearance().mainColor = .grey
MarkedSubstrings.appearance().markFont = .systemFont(ofSize: 18)
MarkedSubstrings.appearance().markColor = .brown
Currency
根据设定的区域、货币符号和其他参数格式化字符串(或数字)为价格。
文档
类型如 String、Int、Float、Double 扩展以符合 CurrencyFormatted
协议并实现此方法
func currency(mainFont: UIFont,
mainColor: UIColor,
locale: Locale,
symbol: String,
prefix: String?,
postfix: String?,
count: Int?,
countFont: UIFont?,
countColor: UIColor?,
minFraction: Int,
maxFraction: Int,
isStriked: Bool) -> NSAttributedString?
所有字段都是可选的,并具有默认值。如果无法将字符串解析为价格,则返回 nil。同样,CurrencyFormatted
协议还有一个静态方法
public static func currencySymbol(for localeIdentifier: String = "ru_RU") -> String
返回货币符号。它用作默认货币。
主要方法 currency
将逗号转换为点,然后从字符串中删除所有非数字字符,除了负号 (-) 和点 (.). 然后格式化字符串。在此情况下,它作为整数部分和小数部分的分隔符。如果点多于一个,则方法返回 nil。
输入参数
- mainFont:价格字符串字体。默认为系统字体系统大小。
- mainColor:价格字符串颜色。默认为
darkText
颜色。 - locale:格式化价格的区域。默认为当前设备的当前区域。
- symbol:要使用的货币符号。默认为执行静态函数
currencySymbol
的结果,返回ru_RU
区域的符号(俄罗斯卢布)。 - prefix:将放在价格前面的前缀。默认为 nil。
- postfix:将放在价格后面的后缀。默认为 nil。
- count:商品数量。默认为 nil。如果值大于 1,则在价格前面将出现此值加 ' x '。例如,对于值为 3 和价格为 100,将出现 '3 x 100 ₽'。
- countFont:商品数量字体。默认为 nil 和与参数
font
一致。 - countColor:商品数量颜色。默认为 nil 和与参数
color
一致。 - maxFraction:小数点后最小位数。默认值为 0。
- maxFraction:小数点后的最大位数。默认值为0。
- isStriked:如果值为
true
,则价格值将被划掉。默认为false
。
通过Appearance
可以配置以下参数,使用CurrencyFormat
类:
- mainFont
- mainColor
- locale
- symbol
- prefix
- postfix
- countFont
- countColor
- maxFraction
- maxFraction
示例和案例使用
let defaultFont = UIFont.systemFont(ofSize: 18)
let defaultColor = UIColor.black
//1.
1234.4345.currency(font: defaultFont, color: defaultColor, maxFraction: 2)
//2.
" - 1 234 рублей.".currency(font: defaultFont, color: .red, prefix: "prefix", postfix: "postfix", isStriked: true)
//3.
"1 2 sd 3 ggdf4 рублей".currency(font: defaultFont, color: defaultColor, count:5)
//4.
let locale = Locale(identifier: "en_US")
let symbol = String.currencySymbol(for: "fr_FR")
"1 234 (тысяча двести тридцать четыре)".currency(font: defaultFont,
color: defaultColor,
locale: locale,
symbol: symbol,
count:2,
countFont: .boldSystemFont(ofSize: 22),
countColor: .blue)
通过Appearance
设定属性的示例
CurrencyFormat.appearance().mainFont = .systemFont(ofSize: 20)
CurrencyFormat.appearance().mainColor = .grey
CurrencyFormat.appearance().symbol = .currencySymbol(for: "us_US")
CurrencyFormat.appearance().countColor = .red
HEXColorable
检查字符串是否是颜色HEX表示形式,如果可能,转换为UIColor
。
文档
String
结构通过ColoredString
协议进行了扩展,该协议具有两个属性
var isHexColor: Bool { get }
var color: UIColor? { get }
isHexColor
检查字符串是否为HEX颜色表示。color
尝试从字符串创建UIColor
对象。失败时返回nil。
支持完整格式的全(#FFAA99)和缩短格式的缩写(#FA9)。井号(#)不是必须的。
示例和案例使用
print("\("#FF8822".isHexColor)")
print("\("#FF8822".color!)")
print("\("FF8822".color!)")
结果
true
UIExtendedSRGBColorSpace 1 0.533333 0.133333 1
UIExtendedSRGBColorSpace 1 0.533333 0.133333 1
RemoveCharacters
从字符串中移除所有在传递的子串中存在的字符。
文档
String
结构被扩展,并添加了一个方法
func removeCharacters(_ list: String, ignoreCase: Bool = false) -> String
该方法从目标字符串中移除所有在传递的list
子串中存在的字符。如果ignoreCase
被传递为true
,则不受字母大小写的影响。
示例和案例使用
let string = "Test with test for test if testing is available."
print("\(string.removeCharacters("teail"))")
print("\(string.removeCharacters("TEAIL", ignoreCase: true))")
结果
Ts wh s for s f sng s vb.
s wh s for s f sng s vb.