Tag: Tiny扩展

TinyExtension:增强固定的URL初始化

此文章同时提供中文版本: TinyExtension:优化固定URL创建 我相信当今大多数应用程序都使用网络请求,因为网络使一切变为可能。 因此, URL类应该是每个人都熟悉的。 我相信每个人都会有直接用固定字符串创建URL的经验。 毕竟,第一个请求的url地址必须直接写在代码中。 因此,我们可以像这样在我们的应用中声明第一个网络请求地址: 让媒介= URL(字符串:“ https://medium.com/@GalvinLi”) 很好,但是使用起来可能很不方便,因为URL(string:)方法返回URL? ,并且每次使用时都需要将其拆开。 URL(string:)设计为返回Optional对象,因为参数字符串不一定是有效地址,但是我们可以保证代码中固定的地址中格式的正确性,因此可以强制展开: 让medium = URL(字符串:“ https://medium.com/@GalvinLi”)! 强制拆包具有一个特征,即如果直接使用它,它就像展开的对象一样工作。 但是,当您将其分配给另一个对象时,对象类型将更改回Optional对象。 因此,稳定的方法是直接将其声明为非Optional对象: 让媒介:URL = URL(字符串:“ https://medium.com/@GalvinLi”)! 现在,我们可以轻松使用此URL对象。 减少强制展开 当定义了许多URL对象时,将有很多强制展开。 在现实世界的项目中,作为一种良好的编程习惯,必须减少强制展开。 当我们习惯于对URL(string:)进行强制解包时,可以强制解开服务器返回的某些url地址,特别是对于经验不足的程序员而言。 为了解决这个问题,我们实际上可以通过一个简单的extension实现它: 此extension仅添加了一个返回URL的初始化方法。 但是这里传递的参数有些不同,不是常规String而是StaticString 。 这是Swift标准库提供的一种类型,某些人可能不知道,所以让我们看一下文档中的定义: 简而言之, StaticString定义了一个在编译时就已知的字符串,即在我们的代码中不接受任何变量的固定字符串。 这是区分需要手动处理的URL地址和代码中的固定URL的好方法。 使用它的方法非常简单: 让媒介= URL(staticString:“ https://medium.com/@GalvinLi”) 消除力解开可以使代码更干净,更安全。 更好的实施 StaticString使代码更安全,但我们可以使其更好。 对于编译器, “https://medium.com”是一个字符串,而URL()是一个url对象。 但是对于我们来说,以https开头的字符串已经可以表示url对象。 为了使编译器也知道这一点,我们需要添加另一个extension : ExpressibleByStringLiteral是用于初始化的protocol ,专门用于=初始化。 当然,这仍然是用于StaticString初始化而不是String ,现在我们可以使用=来直接初始化url,如下所示: 让媒介:URL […]

TinyExtension:简化的空闭包

此文章同时提供中文版本: TinyExtension:空封闭简化 在Swift中,我们经常使用Closure。 当然,大多数Closure用于实现特定的功能块,但是在某些情况下,我们将使用空Closure: 情况1:忽略回调 通常,将实现回调方法,但有时接口提供的功能比我们需要的更多。 例如,我们需要使用以下功能: func sampleRequest(success: (Bool, String) -> (), failure: () -> ()) { // some network request logic // with some local variable store logic } 通常,我们将实现success和failure回调,但是在某些情况下,我们将忽略某些回调。 例如,在预加载数据时,我们不需要处理failure回调。 毕竟,预加载是在后台调用的,错误消息永远不会响应UI,因此可以删除。 我们调用的代码如下: sampleRequest(success: { (isSuccess, text) in // do some complex thing }, failure: {}) 在这里,我们使用了空的Closure。 实际上,这很简单,因为failure回调不携带任何数据。 但是,如果我们的预加载在方法中完成,则也无需实现success回调,调用的效果将变为: sampleRequest(success: { _, _ […]