MochaUtilities
MochaUtilities 是一个用 Swift 编写的库,旨在帮助 iOS 开发者在编码期间。
此 README 编写仍在进行中,因此并未完全记录所有可用类和方法。
特性
MochaUtilities 设计用来在尽可能多的常见需求上帮助 iOS 开发者。在构建 iOS 项目期间,开发者通常需要相同的样板代码。这个库旨在减少这种代码。它不使用 CocoaPods 中的任何其他库作为依赖,因为它的目的是帮助解决更多一般的编码问题。
请注意,为了使用 MochaUtilities 的任何功能,文件头部必须包含 import MochaUtilities
必须。
大多数(如果不是所有)Util 类的公共方法都是静态的。如果不是,它将在此处明确描述。
MochaUtilities 分为以下子库:
基本
基本子库包含了一些最基本的类和扩展,就像它的名字所暗示的那样。这个特定的子库可以(但不应该)单独使用,因为它不向用户提供太多功能。
MochaException
MochaException
枚举类型内部用于 MochaUtilities,以便更简洁地表示可能发生的问题。它与 Swift 的 Error
类型相关联,因此可以作为错误抛出。
MochaException
包含以下可能的值
- ioException:当 HttpHelper 遇到问题(除了下文中描述的 appSecurityTransportException 错误之外)时使用。
- fileNotFoundException:当在应用程序的包或文档中找不到指定的文件引用或路径时使用。主要在 BundleUtil 和 DocumentsUtil 类中使用。
- appSecurityTransportException:当 HttpHelper 请求数据,但无法通过项目中的 App Security Transport 在 Info.plist 中指定的值访问给定的 URL 时使用。
- notImplemented:当需要先前的方法或类继承但尚未实现时使用。
- domainException:当 MochaUtilities 中的任何值或转换无效时使用。此特定值可能在 1.0 版本中删除。
- genericException:当发生未指定的错误时使用。
String+Basic
是用于 MochaUtilities 实现的 String
类的扩展。它包含只读属性 length
和 isNotEmpty
,以及方法 equalsIgnoreCase(_:).
length
属性返回预期中的 String
长度。当此 Pod 支持 Swift 4 时可能会删除此属性。 isNotEmpty
简单地返回字符串是否为空。尽管可以通过 !someString.isEmpty
访问此信息,但这有助于编写更易于阅读的代码。
let lenth = "my_length".length
//length = 9
"".isNotEmpty
//false
"Non Empty String".isNotEmpty
//true
equalsIgnoreCase(_:)
方法在不考虑大小写的情况下将 String
本身与另一个给定的 String
进行比较。此方法还可以比较非英文单词。
let someText = "lorem ipsum"
let otherText = "Lorem Ipsum"
print(someText.equalsIgnoreCase(otherText))
//prints true since both Strings are essentially the same except one is capitalized
let heart = "coração"
let hearts = "corações"
print(heart.equalsIgnoreCase(hearts))
//prints false since both Strings varies at the end
MochaLogger
是 MochaUtilities 使用默认的日志类。它使用 Singleton 模式。它的公共方法是 changeTag(to:)
,removeTag()
和 log(_:)
。默认使用的标签是 Mocha
。
通过 MochaLogger
记录消息时,它仅在未调用 removeTag()
的情况下添加前缀 [<given_tag>]
。因此,默认情况下,如果记录 message
,控制台将打印 [Mocha] message
。
MochaLogger.log("This is a test.")
//prints [Mocha] This is a test.
MochaLogger.changeTag(to: "New Tag")
MochaLogger.log("Trying out a new tag.")
//prints [New Tag] Trying out a new tag.
MochaLogger.removeTag()
MochaLogger.log("Works just like print.")
//prints Works just like print.
巴西
巴西子模块为巴西开发者提供了特定的功能。
CpfUtil
这个类负责对字符串应用或移除个人身份信息码(CPF)的掩码。它还可以检查提供的字符串是否是有效的CPF。
对于掩码和取消掩码字符串,请分别使用 mask(_:)
和 unmask(_:)
。如果提供的值无法进行掩码或取消掩码,则这些方法将返回空字符串。
还有一个方法可以检查提供的字符串是否有应用掩码。
let masked = CpfUtil.mask("12345678900")
//masked equals 123.456.879-00
let unmasked = CpfUtil.unmask("123.456.789-00")
//unmasked equals 12345678900
如方法名所示,isValid(_:)
方法用于检查提供的字符串是否是有效的CPF。如果提供的字符串是nil、空或无法转换为数值,则返回 false
。
let maskedCheck = CpfUtil.isValid("000.000.000-00")
//maskedCheck is true
let unmaskedCheck = CpfUtil.isValid("00000000000")
//unmaskedCheck is also true
核心
核心子模块提供了iOS编程期间使用的最常用功能。
String+Core
UIColor+Core
偏好设置
AppUtil
BundleUtil
DateUtil
DeviceUtil
DocumentsUtil
FileUtil
KeyboardUtil
NavigationBarUtil
NumberUtil
NumberUtil
类用于在String?
(可选字符串)格式中处理数值。它可以将值转换为特定的数值类型。
对于转换,可用的方法包括toInteger(_:, with:)
、toFloat(_:, with:)
、toDouble(_:, with:)
和toNumber(_:, with:)
。如果给定的String?
为nil或无法转换为目标数值类型,将返回默认值。如果没有传递默认值,则默认为零。
以下示例展示了toInteger(_:, with:)
方法的工作方式。上述其他方法与它们各自的类型类似工作。
let integerString = "123"
let integer = NumberUtil.toInteger(integerString)
//integer is an Int with value 123
let nonIntegerString = "4a5"
let defaultValue = NumberUtil.toInteger(nonIntegerString)
//since no extra argument was given and nonIntegerString cannot be converted to an integer,
//defaultValue will be 0 (zero)
let anotherDefaultValue = NumberUtil.toInteger(nonIntegerString, with: -1)
//since nonIntegerString cannot be converted to an integer,
//anotherDefaultValue will be -1
OrientationUtil
StatusBarUtil
TabBarUtil
NotificationUtil
Images
Images子组件帮助解决一些与图片相关的问题。
UIColor+Image
ImageUtil
PrintScreenUtil
网络
网络子类包含了一些旨在帮助处理与互联网相关的类,例如 HTTP 请求。
MochaEmailAttachment
HttpHelper
HttpHelper
用于处理 HTTP/HTTPS 请求和响应。它是在构建者模式下的。构建者是 HttpHelper
类的内嵌类。以下代码演示了如何进行简单的 GET 请求。
let handler = { (data: Data?, error: Error?) in
//handle response information
}
//directly get the reference to HttpHelper
let httpHelper = HttpHelper.builder.url("http://www.google.com").completionHandler(handler).build()
httpHelper.get()
使用前应考虑以下事项
url(_: String)
和completionHandler(_: @escaping HttpCompletionHandler)
构建者方法对所有请求是必需的。如果不设置,请求会失败或不会返回接收到的响应。HttpCompletionHandler
类型被定义为闭包(_ data: Data?, _ error: Error?) -> Void
。- 请求的
contentType
默认为application/json
。 - 请求的
timeout
默认为 60 秒。 - 请求的
encoding
默认为 UTF-8。 - 其他可能的配置有
parameters(_:)
、header(_:)
、basicAuth(username:, password:)
、certificate(_:, with:)
、trustAll(_:)
和hostDomain(_:)
。
要将基本身份验证头设置到您的 HTTP 请求中,请使用以下方法 basicAuth(username: String, password: String)
:
let httpHelper = HttpHelper.builder.url(someUrl).completionHandler(someHandler)
.basicAuth(username: "request_basic_auth_usr", password: "request_basic_auth_pwd").build()
httpHelper.get()
在使用 build()
方法之前,如有必要,请保留对 HttpHelper.Builder
类的引用。可能需要根据某些参数配置请求。例如:
func doHttpRequest(needsBasicAuth: Bool, addDefaultHeader: Bool) {
let handler = { (data: Data?, error: Error?) in
//handle response information
}
//directly get the reference to HttpHelper
let builder = HttpHelper.builder.url("http://www.google.com").completionHandler(handler)
if needsBasicAuth {
builder.basicAuth(username: "request_basic_auth_usr", password: "request_basic_auth_pwd")
}
if addDefaultHeader {
builder.header(["default_header_key": "default_header_value"])
}
...
let httpHelper = builder.build()
httpHelper.get()
}
随着文档的增长,将会包含更多示例。
EmailUtilDelegate
用于与调用类和 EmailUtil 通信的协议。其方法包括 onEmailSuccess()
、onEmailCancelled()
和 onEmailFailed()
,都必须强制实现。
BrowserUtil
要打开设备的默认浏览器,请使用 openUrl(_: String?)
。如果给定的 String 为 nil 或无效,则不执行任何操作。
@IBAction func onClickOpenBrowser(sender: Any?) {
let url = "http..."
BrowserUtil.openUrl(url)
}
EmailUtil
软件要求
- iOS 11.0+
- Xcode 8.1+
- Swift 4.2+
安装
MochaUtilities 通过 CocoaPods 提供。要安装它,只需在 Podfile 中添加以下行:
pod "MochaUtilities"
如果只需要其中一个特定的模块,请在 Podfile 中添加以下行:
pod "MochaUtilities/<NAME_OF_MODULE>"
有关可用模块的更多信息,请参阅 功能 部分。
贡献
如果您有任何建议、改进或问题要提交(无论是关于代码还是此README),请随时联系我或发送一个pull请求。
此库遵循Swift风格指南。在提交任何代码之前,请验证它是否也遵循此指南。如果您发现任何不符合指南的已提交代码,也请随时联系我或发送pull请求。
仅接受英语提交的commits。
作者
Gregory Sholl e Santos
许可证
MochaUtilities遵循MIT许可证。有关更多信息,请参阅LICENSE文件。