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”,可以参考我的其他有关高阶函数的文章