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 =“ https://medium.com/@GalvinLi”
因为=
之后只有一个字符串,所以我们必须声明对象的类型,以便编译器知道该字符串实际上应该初始化为URL
对象。 完成所有这些操作后,我们对固定url的初始化变得更加简单和安全。