在程序开发当中,for循环使用的频率无疑是最高的。常用的swift循环是递增式遍历。当然各种循环,swift都能办到。但其大多采用关键字形式实现,大部分开发者更喜欢直接使用C式循环代码。在swift3.0后,C语言形式被彻底废弃,因此从低版本升上来的代码如果是swift风格写法,按照提示基本可以直接fix。但如果很多循环实现都是基于C语言形式,那不得不讨论一下如何拯救这个可怕的习惯了。swift的循环语言特性跟python最为接近(ps:我学的语言当中最接近)。所以,大多数python循环能处理的情况,swift都能办到且更为优雅。

1:如何遍历一个字典或者数组?

首先要提的是swift的for..in..语法,这个语法在python当中被称之为迭代。用于数组,字典之类的数据内容遍历。从作用上分析,是直接将数组元素赋值给变量,并取出,无需通过数组下标来取值。而针对于字典,除了取出key值,我们还可以同时取出关键字。具体代码如下

let list = [1,3,5,7,"string test"]
for i in list{
print(i)
}
let dict = ["name":"key name","name1":"key1 name","name2":"key 2 name"]
for key in dict{
print(key)
}
}

2:也许,我仅仅是需要一个计数器?

更多时候,循环变量被用于约束循环的次数或者做为int类型进行引用,值得一提的是,swift支持直接区间遍历。在3.0版本之前,python的区间语法range关键词适用。在3.0以后。swift不推荐使用。并且基于自身语言特性,在使用时,需要额外加关键字。那么,我们如何用swift带来的语法糖写出漂亮的for循环呢 代码如下:

for i in 1..<10{
print(i)
// 打印结果为1-9
}
for i in 1...10{
print(i)
//打印结果为1-10
} for i in Range(start: 1,end: 10){
print(i)
// 打印结果为1-9 不推荐使用
}

  3:help 我真的需要递减!

这也许是swift的一个大坑了,当然解决方式很容易。只需要一个关键字即可实现,swift3.0之后稍有变化。对要遍历的区间调用reverse()方法,即可实现for循环的反向遍历,代码如下

for i in (0...10).reverse(){
print(i)
// 打印结果为10-0
}

  4:这就结束了吗

当然不是啦,从语言特性上来上说,python对数组和循环的处理是最令人觉得舒适的。而在循环的处理上,几乎涵盖了python的所有特性,且大多也是以函数调用的方式来处理的。下面就要介绍一下平时可能会用到的一些方法。

4.1.enumerate

如词,这是为遍历对象调用一个枚举方法,在对数组等结构进行遍历时,我们偶尔需要知道每次遍历的索引,那么就需要用到enumerate了,其返回对象是一个元组,形式为(x,y),x代表遍历的索引值,y代表遍历的元素。代码如下:

for (index, i) in (1...10).enumerate(){
print(index)// 遍历索引
print(i) // 遍历元素 }

4.2 filter

也许,你想要在循环就过滤掉一系列毫无意义的数据?,swift提供在循环时直接过滤的方法,代码如下:

for i in (1...10).filter({ i in i % 2 == 0}) {
print(i)
//输出结果为1-10之间的偶数
}
///////////补充一个漂亮的语法糖///////////
for i in (1...10).filter({ $0 % 2 == 0}) {//swift闭包可以省略参数且用$0匿名,第二个参数则用$1,以此类推
print(i)
//输出结果为1-10之间的偶数
}

  

  如上,除了单独调用方法对循环进行处理之外,swift还支持在循环中嵌套调用各种方法,这使得对数据的处理更为方便快捷,所以,也许彻底放弃C式循环,未尝不是一个好选择

  





关于for循环------swift3.0的更多相关文章

  1. 算法与数据结构(十三) 冒泡排序、插入排序、希尔排序、选择排序(Swift3.0版)

    本篇博客中的代码实现依然采用Swift3.0来实现.在前几篇博客连续的介绍了关于查找的相关内容, 大约包括线性数据结构的顺序查找.折半查找.插值查找.Fibonacci查找,还包括数结构的二叉排序树以 ...

  2. Swift3.0变化分享

    Swift 3.0 做出的改变很大,在这篇文章中,我将尽我所能,利用代码样例给大家解释Swift 3.0最重要(要命)的改变,希望大家能够做好升级Swift 3.0 的准备.Swift 3.0的改变不 ...

  3. swift3.0变化总结

    Swift 3.0 做出的改变很大,在这篇文章中,我将尽我所能,利用代码样例给大家解释Swift 3.0最重要(要命)的改变,希望大家能够做好升级Swift 3.0 的准备.Swift 3.0的改变不 ...

  4. Swift3.0都有哪些变化

    从写第一篇Swift文章的时候到现在Swift已经从1.2发展到了今天的3.0,这期间由于Swift目前还在发展阶段并不能向下兼容,因此第一篇文章中的部分代码在当前的Xcode环境中已经无法运行.在W ...

  5. Swift3.0语言教程查找字符集和子字符串

    Swift3.0语言教程查找字符集和子字符串 Swift3.0语言教程查找字符集和子字符串,在字符串中当字符内容很多时,我们就需要使用到查找字符集或者子字符串的方法.以下我们将讲解3种查找字符集和子字 ...

  6. Swift3.0 函数闭包与OC Block

    刚接触Swift,如有不对的点,欢迎指正.转载请说明出处 定义一个基本函数 //定义一个函数,接收一个字符串,返回一个String类型的值 func test(name:String) -> S ...

  7. iOS开发之资讯类App常用分类控件的封装与实现(CollectionView+Swift3.0+)

    今天博客中,我们就来实现一下一些常用资讯类App中常用的分类选择的控件的封装.本篇博客中没有使用到什么新的技术点,如果非得说用到了什么新的技术点的话,那么勉强的说,用到了一些iOS9以后UIColle ...

  8. 突然兴起复习一下Swift3.0

    /// 参考Swift3.0.1文档 /// 摘录来自: Apple Inc. "The Swift Programming Language (Swift 3.0.1)". iB ...

  9. swift学习笔记 - swift3.0用GCD实现计时器

    swift3.0之后,GCD的语法发生了翻天覆地的变化,从过去的c语法变成了点语法,下面是变化之后用GCD实现计时器的方法: 先贴代码: // 定义需要计时的时间 var timeCount = 60 ...

随机推荐

  1. Python报错UnicodeDecodeError: ascii codec can t decode byte 0xe0 ...解决方法

    用命令(python setup.py install)安装webpy时候总是报错 在网上搜索到的解决方法如下: 1. 这是Python 2 mimetypes的bug 2. 需要将Python2.7 ...

  2. django数据库操作和中间件

    数据库配置 django的数据库相关表配置在models.py文件中,数据库的连接相关信息配置在settings.py中 models.py相关相关参数配置 from django.db import ...

  3. Linux指令

    文件指令 ls: ls -a :把隐藏的文件显示 ls -l  显示文件的详细信息 -lh  也是显示文件的详细信息,只是文件的大小是以k单位 ls -ld 显示指定目录下的信息 mkdir: mkd ...

  4. CSS之表单元素

    表单就是收集用户信息的,就是让用户填写的.选择的. 1                <div> 2                         <h3>欢迎注册本网站&l ...

  5. ORA-01438: 值大于为此列指定的允许精度

    Number的数据声明如下:表示        作用        说明Number(p, s)        声明一个定点数        p(precision)为精度,s(scale)表示小数点 ...

  6. System.InvalidOperationException : 不应有 <Response xmlns=''>。

    xml如下: <?xml version="1.0" encoding="UTF-8"?> <Response version="2 ...

  7. 神经网络模型及R代码实现

    神经网络基本原理 一.神经元模型 图中x1~xn是从其他神经元传来的输入信号,wij表示表示从神经元j到神经元i的连接权值,θ表示一个阈值 ( threshold ),或称为偏置( bias ).则神 ...

  8. 用R做逻辑回归之汽车贷款违约模型

    数据说明 本数据是一份汽车贷款违约数据 application_id    申请者ID account_number 账户号 bad_ind            是否违约 vehicle_year  ...

  9. Web 常用功能测试方法

    功能测试就是对产品的各功能进行验证,根据功能测试用例,逐项测试,检查产品是否达到用户要求的功能.常用的测试方法如下: 1. 页面链接检查:每一个链接是否都有对应的页面,并且页面之间切换正确. 2. 相 ...

  10. 耿丹CS16-2班助教总结

    Deadline: 2016-1-7 11:59pm 开篇有言 --又是一年末,不似风光,却添风霜,顶霾前进,踽踽独行,可乎? 助教那些事儿 助教这份工作是之前就担任过的,很羞愧,当时才担任了几天就撒 ...