Swift中数组的受限扩展


协议和扩展是快速发展的组成部分。 到目前为止,您可能已经使用了很多时间。 您可能出于各种原因为您的班级或结构创建了扩展。

这里我将给出一些示例,其中您可以为几个现有的类进行扩展。如果你们还记得在Objective-C上工作,那么您将与Catagories交叉。

在这里,约束扩展是一种类别,您可以在不知道其内部工作的情况下扩展现有对象的功能。

在这里,我将以数组为例,数组是同质元素的集合,在进行实时项目时,您需要处理很多需要不断操作的数组,您可以提出扩展一样的

字符串数组

让我们假设一个场景,其中您有一个字符串数组,并且需要事先存储少量数据,例如

  • 总字符数
  • 字数
  • 每个单词中的字符数

让我们来看一个数组示例,如下所示

  let arrayString:[String] = [“教父”,“肖申克的救赎”,“辛德勒的名单”,“愤怒的公牛”,“乱世佳人”,“绿野仙踪”,“阿拉伯劳伦斯”,“阿甘”] 

现在,假设您在整个项目中具有与上述所需的实现相同的数组。

为了避免重复并扩展现有Array的功能,我们可以编写如下扩展

通过在Array上实施受约束的扩展,您可以轻松避免代码重复,并且Array操作很容易。

让我们继续测试实施

 让characterCount = arrayString.totalCharacterCount() 
让wordCount = arrayString.wordCount()
让eachCharacterCount = arrayString.elementCharacterCount()
打印(“ characterCount = \(characterCount)”)
打印(“ wordCount = \(wordCount)”)
print(“ eachCharacterCount = \(eachCharacterCount)”)//这将打印characterCount = 128
wordCount = 22
eachCharacterCount = [13、24、16、11、18、16、18、12]

这是数字的另一个例子

这是数字数组的另一个例子

在上面的示例中,这里以计算为例

  • 数组元素的总和
  • 将数值数组转换为字符串数组

这可以在任何数字数组上无缝运行,但在数组中的其他元素上同样会出错。

 让numArray = [1,2,3,4,5,6] 
print(“ numArrayType = \(type(of:numArray))”)
让sumValue = numArray.sum()
让convertStringArray = numArray.string()
print(“ val = \(sumValue)”)
print(“ convertedStringArray = \(convertedStringArray)”)
print(“ convertedStringArrayType = \(type(of:convertedStringArray))”)//打印的值是
numArrayType = Array
值= 21
convertStringArray = [“ 1”,“ 2”,“ 3”,“ 4”,“ 5”,“ 6”]
ConvertedStringArrayType =数组

扩展不仅限于Swift元素,例如字符串和数字,还可以扩展为用户定义的对象。

考虑代码

这里有一个Person Struct,可以定义他的名字,年龄和薪水详细信息,让我们继续创建另一个人并添加一个Array。

上面的代码将打印

  年龄:-40 
年龄:-45
年龄:-30
年龄:-28
年龄:-50

现在您想根据以下内容重新排列数组

  • 薪水
  • 年龄

您可以轻松执行以下扩展

那么您可以轻松实现代码以将Array元素重新安排为

预期结果将重新排列为

  人员重新排列年龄:-50 
人员重新排列的年龄:-45
人员重新排列年龄:-40
人员重新排列年龄:-30
重新安排的人的年龄:-28 重新安排的人的工资:-932.0
人员调薪:-1527.0
人员重新安排的薪水:-1763.0
人员重新安排的薪水:-1876.0
人员重新安排的薪水:-13344.0

如上所述,约束扩展在处理数组内容时派上用场。 另外,避免重复代码。

这些扩展不限于上述示例,并且可以出于不同的目的而不同地使用。

最后一个例子。

上面的代码计算单个字符的出现次数,并将该值作为字典返回。

 让stringArray = [“ Vishwas”,“ Palindrome”,“ Rat”] 
let char:[Character] = stringArray.flatMap {Array($ 0)}
让repeatDict = char.characterCount()
print(repeatDict)//上面的代码将打印[“ V”:1,“ w”:1,“ n”:1,“ o”:1,“ d”:1,“ t”:1,“ a “:3,“ i”:2,“ r”:1,“ m”:1,“ R”:1,“ s”:2,“ e”:1,“ l”:1,“ P”: 1,“ h”:1]

您可以在下面找到完整的游乐场

vishw33 /带阵列的约束扩展

带数组的约束扩展–简短示例如何在Swift中约束扩展

github.com

PS:-如果您想更多地了解代码中使用的函数“ Map”,“ Reduce”,“ Sort”,可以参考我的其他有关高阶函数的文章

高阶函数及其在Swift 4中的用途

如果您有时在Swift中工作,您肯定会听说过主要用于…的高阶函数。

medium.com