扩展那些本机类!

正如我在上一篇关于全局可用函数的文章中提到的那样,有时我们不需要编写一个函数。 我们可以扩展本机类以从中获取更多信息。

如果您不了解iOS Swift扩展,请在此处了解它们。

扩展的主要优势也许,至少对我而言是……

iOS扩展也可以扩展本机类

因此,如果您需要现有组件/元素的额外功能或扩展本机类的功能,则只需为其编写一个扩展。 它可以驻留在应用程序中存在的任何文件中。 声明扩展名后,您可以将它们用作所有扩展类的函数。

让我们从一些示例开始,以阐明我的观点。

假设我们需要带下划线的标签。 将此粘贴到您的代码中的任何位置。

现在,我们的UILabel类具有一个名为下划线的新功能,可在整个应用程序中使用。 假设我们有一个类似下面的标签,

我们可以通过添加以下行来使用下划线类,

  label.underline() 

扩展了UIKit的基本UILabel类后,我们的下划线功能可用于UILabel类或UILabel扩展的每个组件!

所以我们的实现看起来像这样,

这是一个非常基本的例子。 但是它也可能非常非常强大!

让我们看另一个例子,一个更原始的格式化方式,但仍然是必需的。

每当需要大量显示时,都需要用逗号格式化整数。 如果我们要在项目中以逗号格式格式化任何整数,则可以添加一个扩展本机Int类的附加函数,如下所示:

现在,我们可以像下面在代码中所需要的任何地方那样利用它。

 让量= 1000000000 
打印(“逗号格式:\(amount.withCommas())”)
//返回“逗号格式:1,000,000,000”

那不方便吗?

现在,如果是货币金额怎么办? iOS专用于此用例的格式化程序。 我们可以将NumberFormatter类和扩展名一起使用,以在全局范围内使用此格式化程序,就像我们编写扩展Int类的逗号分隔符功能一样。

让我们定义另一个扩展,但是为此,我们将扩展Double类,因为无论如何货币最有可能是double类型!

现在,就像下面和中提琴一样使用它!

  print(amountDbl.currencyString()??“”) 
//返回“ $ 1,000,000,000.00”

当然,您可以覆盖语言环境以获得其他格式的货币。

为此,我们将不得不稍微重写一下我们的函数。 首先,我们需要将语言环境字符串作为函数参数。 我们将改变这一点,

  formatter.locale = Locale.current 

进入这个

  formatter.locale =语言环境(标识符:someString) 

在这里,占位符someString将替换为我之前告诉您的区域设置字符串参数。

因此,我们更改后的功能现在应该看起来像这样,

现在,如果我们使用它,它将以指定的语言环境返回格式化的数量字符串。

  print(amountDbl.currencyString(locale:“ en_IN”)??“”) 
//返回“₹1,00,00,00,000.00”
  print(amountDbl.currencyString(locale:“ en_FR”)??“”) 
//返回“€1 000 000 000,00”

看到方便吗?