2016-07-31 18:13:32 chendehao001 阅读数 2808
  • 7天带你玩转Mysql数据库之SQL语句

    您观看课程学习后 免费入群领取【超全Python资料包+17本学习电子书】 七年SQL语句编写经验。满满的干货! 在网上找了好多SQL数据库的教程,但你还会面临这样的问题: 1. 自己写了SQL却不知道对不对。 2. 在上线后发现原有的数据内容SQL语句执⾏结果没问题, 但是数据变化了以后SQL返回的结果就错误了。 3. 稍微复杂⼀点的SQL就不知道该如何写了。 4. 看不懂同⾏写的SQL是为什么。 5. 不知道索引的原理。 6. 不知道怎么加索引能够提⾼查询性能 纵观全网的教程都只停留在概念解析的层面,没有深入剖析原理,所以看了那么多的教程,可还是不会写。 本教程与其他教程不同带你深入了解原理,让你真正了解什么是SQL语句,让你懂得SQL语句的编写⽅法。不再 为SQL语句而烦恼。真正做到面对任何问题能够判断出SQL语句是不是能够实现,该怎样实现。 

    4439 人正在学习 去看看 姚青林

1. while循环

  • OC的 while 循环

    • 格式:while(循环保持条件){需要执行的语句}
    • 如果只有一条指令while后面的大括号可以省略
    • 条件语句判断非零即真
  • swift的 while 循环

    • while后的圆括号可以省略
    • 只能以bool作为条件语句, 没有非零即真, 只有 truefalse
    • 如果只有条指令while后面的大括号不可以省略
//OC:
//格式:while(循环保持条件){需要执行的语句}
int i = 0;
int sum = 0;
while (i <= 10) {
    sum = i++;
}
//NSLog(@"%d",sum);
//输出结果:10

int i = 0;
int sum = 0;
while (i <= 10)
sum = i++;
NSLog(@"%d", sum);
//输出结果:10
//Swift:
//0.while后的圆括号可以省略
//1.只能以bool作为条件语句
//2.如果只有条指令while后面的大括号不可以省略
var i:Int = 0
var sum:Int = 0
while (i <= 10) {
    sum = i++ // 推荐写法 i += 1
}
print("\(sum)")
//输出结果:10

var i1:Int = 0
var sum1:Int = 0
while i1 <= 10 {
    sum1 = i1++ // 推荐写法 i += 1
}
print("\(sum1)")
//输出结果:10

2. do/repeat while循环

  • Swift2.0之后变为 do while, 变为repeat while, 而do用于捕捉异常
// oc
int i = 0;
int sum = 0;
do {
    sum = i++;
} while (i <= 10);
NSLog(@"%d", sum);
//输出结果:10

int i = 0;
int sum = 0;
do
sum = i++;
while (i <= 10);
NSLog(@"%d", sum);
//输出结果:10
//如果只有一条指令 do 后面的大括号可以省略
// swift
var i2:Int = 0
var sum2:Int = 0
repeat{
    sum2 = i2++ // 推荐写法 i += 1
}while(i2 <= 10)
print(sum2)
//输出结果:10

var i3:Int = 0
var sum3:Int = 0
repeat{
    sum3 = i3++ // 推荐写法 i += 1
}while i3 <= 10
print(sum3)
//输出结果:10
2014-09-09 14:09:01 tonny_guan 阅读数 8889
  • 7天带你玩转Mysql数据库之SQL语句

    您观看课程学习后 免费入群领取【超全Python资料包+17本学习电子书】 七年SQL语句编写经验。满满的干货! 在网上找了好多SQL数据库的教程,但你还会面临这样的问题: 1. 自己写了SQL却不知道对不对。 2. 在上线后发现原有的数据内容SQL语句执⾏结果没问题, 但是数据变化了以后SQL返回的结果就错误了。 3. 稍微复杂⼀点的SQL就不知道该如何写了。 4. 看不懂同⾏写的SQL是为什么。 5. 不知道索引的原理。 6. 不知道怎么加索引能够提⾼查询性能 纵观全网的教程都只停留在概念解析的层面,没有深入剖析原理,所以看了那么多的教程,可还是不会写。 本教程与其他教程不同带你深入了解原理,让你真正了解什么是SQL语句,让你懂得SQL语句的编写⽅法。不再 为SQL语句而烦恼。真正做到面对任何问题能够判断出SQL语句是不是能够实现,该怎样实现。 

    4439 人正在学习 去看看 姚青林
循环语句能够使程序代码重复执行。Swift编程语言支持4种循环构造类型:while、do while、for和for in。for和while循环是在执行循环体之前测试循环条件,而do while是在执行循环体之后测试循环条件。这就意味着for和while循环可能连一次循环体都未执行,而do while将至少执行一次循环体。for in是for循环的变形,它是专门为集合遍历而设计的。
一、while语句
while语句是一种先判断的循环结构,格式如下:
while 循环条件 {
    语句组 
}
while循环没有初始化语句,循环次数是不可知的,只要循环条件满足,循环就会一直进行下去。
下面看一个简单的示例,代码如下:
var i:Int64 = 0


while i * i < 100000 {
    i++
}


println("i = \(i)")
println("i * i = \(i * i)")


输出结果如下:
i = 317
i * i = 100489
上述程序代码的目的是找到平方数小于100 000的最大整数。使用while循环需要注意几点,while循环条件语句中只能写一个表达式,而且是一个布尔型表达式,那么如果循环体中需要循环变量,就必须在while语句之前对循环变量进行初始化。示例中先给i赋值为0,然后在循环体内部必须通过语句更改循环变量的值,否则将会发生死循环。
提示 死循环对于单线程程序而言是一场灾难,但是在多线程程序中,死循环是必需的,死循环会出现在子线程中。例如游戏设计中对玩家输入装置的轮询,或是动画程序的播放,都是需要死循环的。下面的代码是死循环的一般写法。
while true { 
    语句组  
}


提示 循环是比较耗费资源的操作,如何让开发人员测试和评估循环效率呢?Xcode 6提供的Playground工具可以帮助我们实现这个目的。在Playground界面中打开时间轴。打开Playground界面后运行代码,如下图所示,程序运行过程中会在右边时间轴绘制出一条线段,横轴是经历的时间,纵轴是i值变化,我们在执行完成后拖曳线段,查看运行历史中i值内容。就本例而言,时间轴中的线段越陡,执行的效率越高。



二、do while语句
do while语句的使用与while语句相似,不过do while语句是事后判断循环条件结构,语句格式如下: 
do {
  语句组 
} while 循环条件
do while循环没有初始化语句,循环次数是不可知的,不管循环条件是否满足,都会先执行一次循环体,然后再判断循环条件。如果条件满足则执行循环体,不满足则停止循环。
下面看一个示例代码:
var i:Int64 = 0


do{
    i++
} while  i * i < 100000


println("i = \(i)")
println("i * i = \(i * i)")


输出结果如下:
i = 317
i * i = 100489
该示例与上一节的示例是一样的,都是找到平方数小于100 000的最大整数。输出结果也是一样的。
三、for语句
for语句是应用最广泛、功能最强的一种循环语句。一般格式如下: 
for 初始化; 循环条件; 迭代 {
  语句组
}
当程序执行到for语句时,会先执行初始化语句,它的作用是初始化循环变量和其他变量,然后程序会查看循环条件是否满足,如果满足,则继续执行循环体并计算迭代语句,之后再判断循环条件,如此反复,直到判断循环条件不满足时跳出循环。终止语句一般用来改变循环条件,它可对循环变量和其他变量进行操作。 
以下示例代码是计算1~9的平方表程序: 
println("n   n*n")
println("---------")
for var i = 1; i < 10; i++  {
    println("\(i) x \(i) = \(i * i)")
}


输出结果如下:
n   n*n
---------
1 x 1 = 1
2 x 2 = 4
3 x 3 = 9
4 x 4 = 16
5 x 5 = 25
6 x 6 = 36
7 x 7 = 49
8 x 8 = 64
9 x 9 = 81
在这个程序的循环部分初始时,给循环变量i赋值为1,每次循环都要判断i的值是否小于10,如果为true,则执行循环体,然后给i加1。因此,最后的结果是打印出1~9的平方,不包括9。 
初始化、循环条件以及迭代部分都可以为空语句(但分号不能省略),三者均为空的时候,相当于一个无限循环。
for ; ;  {
    ......
}
在初始化部分和迭代部分,可以使用逗号语句来进行多个操作。逗号语句是用逗号分隔的语句序列,如下程序代码所示:
var x:Int32
var y:Int32


for x = 0, y = 10; x < y; x++, y--  {
    println("(x,y) = (\(x),\(y))")
}


输出结果如下:
(x,y) = (0,10)
(x,y) = (1,9)
(x,y) = (2,8)
(x,y) = (3,7)
(x,y) = (4,6)
四、for in语句
Swift提供了一种专门用于遍历集合的for循环——for in循环。使用for in循环不必按照for的标准套路编写代码,只需要提供一个集合就可以遍历。
假设有一个数组,原来遍历数组的方式如下:
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


println("----for-------")
for var i = 0; i < countElements(numbers); i++ {
    println("Count is: \(i)")
}


输出结果如下:
Count is: 0
Count is: 1
Count is: 2
Count is: 3
Count is: 4
Count is: 5
Count is: 6
Count is: 7
Count is: 8
Count is: 9
上述语句let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]声明并初始化了10个元素数组集合,目前大家只需要知道当初始化数组时,要把相同类型的元素放到[…]中并且用逗号分隔(,)即可,关于数组集合我们会在第10章详细介绍。
采用for in循环语句遍历数组的方式如下:
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];


println("----for in----")
for item in numbers {
    println("Count is: \(item)")
}


输出结果如下:
Count is: 0
Count is: 1
Count is: 2
Count is: 3
Count is: 4
Count is: 5
Count is: 6
Count is: 7
Count is: 8
Count is: 9

从上例可以发现,item是循环变量,item之前使用var声明,它是隐式变量声明的。in后面是集合实例,for in循环语句会将后面集合中的元素一一取出来,保存到item中。可见for in语句在遍历集合的时候要简单方便得多。但是对于其他操作,for in循环就不太适合了。


更多内容请关注国内第一本Swift图书《Swift开发指南》
本书交流讨论网站:http://www.51work6.com/swift.php
欢迎加入Swift技术讨论群:362298485

欢迎关注智捷iOS课堂微信公共平台





2015-12-16 17:28:21 u014081548 阅读数 228
  • 7天带你玩转Mysql数据库之SQL语句

    您观看课程学习后 免费入群领取【超全Python资料包+17本学习电子书】 七年SQL语句编写经验。满满的干货! 在网上找了好多SQL数据库的教程,但你还会面临这样的问题: 1. 自己写了SQL却不知道对不对。 2. 在上线后发现原有的数据内容SQL语句执⾏结果没问题, 但是数据变化了以后SQL返回的结果就错误了。 3. 稍微复杂⼀点的SQL就不知道该如何写了。 4. 看不懂同⾏写的SQL是为什么。 5. 不知道索引的原理。 6. 不知道怎么加索引能够提⾼查询性能 纵观全网的教程都只停留在概念解析的层面,没有深入剖析原理,所以看了那么多的教程,可还是不会写。 本教程与其他教程不同带你深入了解原理,让你真正了解什么是SQL语句,让你懂得SQL语句的编写⽅法。不再 为SQL语句而烦恼。真正做到面对任何问题能够判断出SQL语句是不是能够实现,该怎样实现。 

    4439 人正在学习 去看看 姚青林

swift 提供了 4 种  循环语句

while 、 do-while 、for  和 for-in

其中 while 、do-while和for 与java语言中是一样的,所以这里重点记录 for-in

使用for-in循环去迭代集合项,例如数字范围,数组项或者字符串中的字符

1.迭代一个包含1到5的闭区间值的集合

for index in 1...5{
    print("\(index) * 25 = \(index * 25)")
}
//1 * 25 = 25
//2 * 25 = 50
//3 * 25 = 75
//4 * 25 = 100
//5 * 25 = 125
注意:索引常量只在循环体内有效,如果你想在循环体之后检查索引值,或者你想让它像变量而不是常量那样工作时,你必须在循环体之前手动声明。
2,如果不需要范围中的每一个值,你可以通过在变量名处使用下划线来忽略索引值

let base = 3
let power = 10
var answer = 1
//求3的10次方,只需要循环10,而不需要关心,循环范围内的值,所以可以用 _ 将其忽略
for _ in 1...power {
    answer *= base
    print(answer)
}
print("\(base) to the power of \(power) is \(answer)")
//3 to the power of 10 is 59049
//for 循环实现上面的例子
//for var index = 0; index < 10; ++index {
//     answer *= base
//}
//print("\(base) to the power of \(power) is \(answer)")
//3 to the power of 10 is 59049

3,for-in 迭代 出 字符串中的每个字符

var str = "abc"
for character in str.characters {
    print(character)
}
//a
//b
//c

4.for-in 遍历 数组,字典在数组和字典的记录中已经写过,不再重复。
2015-12-07 13:20:59 u010998924 阅读数 2143
  • 7天带你玩转Mysql数据库之SQL语句

    您观看课程学习后 免费入群领取【超全Python资料包+17本学习电子书】 七年SQL语句编写经验。满满的干货! 在网上找了好多SQL数据库的教程,但你还会面临这样的问题: 1. 自己写了SQL却不知道对不对。 2. 在上线后发现原有的数据内容SQL语句执⾏结果没问题, 但是数据变化了以后SQL返回的结果就错误了。 3. 稍微复杂⼀点的SQL就不知道该如何写了。 4. 看不懂同⾏写的SQL是为什么。 5. 不知道索引的原理。 6. 不知道怎么加索引能够提⾼查询性能 纵观全网的教程都只停留在概念解析的层面,没有深入剖析原理,所以看了那么多的教程,可还是不会写。 本教程与其他教程不同带你深入了解原理,让你真正了解什么是SQL语句,让你懂得SQL语句的编写⽅法。不再 为SQL语句而烦恼。真正做到面对任何问题能够判断出SQL语句是不是能够实现,该怎样实现。 

    4439 人正在学习 去看看 姚青林
 do {
    try functionWillThrowError()
  } catch {
    // deal with error
  }

2014-08-18 23:36:31 zhangao0086 阅读数 36816
  • 7天带你玩转Mysql数据库之SQL语句

    您观看课程学习后 免费入群领取【超全Python资料包+17本学习电子书】 七年SQL语句编写经验。满满的干货! 在网上找了好多SQL数据库的教程,但你还会面临这样的问题: 1. 自己写了SQL却不知道对不对。 2. 在上线后发现原有的数据内容SQL语句执⾏结果没问题, 但是数据变化了以后SQL返回的结果就错误了。 3. 稍微复杂⼀点的SQL就不知道该如何写了。 4. 看不懂同⾏写的SQL是为什么。 5. 不知道索引的原理。 6. 不知道怎么加索引能够提⾼查询性能 纵观全网的教程都只停留在概念解析的层面,没有深入剖析原理,所以看了那么多的教程,可还是不会写。 本教程与其他教程不同带你深入了解原理,让你真正了解什么是SQL语句,让你懂得SQL语句的编写⽅法。不再 为SQL语句而烦恼。真正做到面对任何问题能够判断出SQL语句是不是能够实现,该怎样实现。 

    4439 人正在学习 去看看 姚青林

Switch简介

Switch作为选择结构中必不可少的语句也被加入到了Swift中,只要有过编程经验的人对Switch语句都不会感到陌生,但苹果对Switch进行了大大的增强,使其拥有其他语言中没有的特性。使用Switch语句很简单:

var i = 0
switch i {
    case 0:
        "0" //被输出
    case 1:
        "1"
    default:
        "2"
}
在这个最简单的Switch语句中,与其他语言很不同的一点是:不用显式的加上break。Swift的Switch语句会自动在case结尾处加上break,执行完满足条件的case部分后,就自动退出了。但是在某些情况下,我们可能会希望Switch能同时执行两条case,那么可以这样:

var i = 3
switch i {
    case 0,3:
        "0" //被输出
    case 1:
        "1"
    default:
        "2"
}
在case后的多个条件中,用逗号隔开即可。

如果就是想执行完一条case之后,想继续执行下一条case,就要用到一个新的关键字:

var i = 0
switch i {
    case 0:
        "0" //被输出
        fallthrough
    case 1:
        "1" //被输出
    case 2:
        "2"
    default:
        "default"
}

使用新的关键字fallthrough能使Switch在执行完一个case之后,紧接着执行下一条case。

Swift的Switch语句一定要涵盖所有的情况,这并不是说一定要有default,只要上面的case能满足所有的情况,就可以不用写default。

需要注意的地方有两点:

  • Switch当然也支持显式的break,通常只有一种情况下你会这么做,那就是当你也不想在default里做任何事情的时候,这个时候你就可以在default里显式地加上一句break。
  • fallthrough并不是在任何情况下都有效,当你在Switch里使用Value Binding技术的时候,fallthrough就被禁止了。Value Binding在下面会讲到。


支持多种数据类型

在Objective-C里,Switch语句只能支持整形的数据(或者一个字符),但是在Swift里,Switch能支持多种数据类型,包括浮点、布尔、字符串等:
支持浮点:
let float = 1.5
switch float {
    case 1.5:
        "1.5"   //被输出
    default:
        "default"
}
支持布尔:
let isSuccess = true
switch isSuccess {
    case true:
        "true"   //被输出
    default:
        "default"
}
支持字符串:
let name = "Bannings"
switch name {
    case "Bannings":
        "Bannings"   //被输出
    default:
        "default"
}
可以说是史上支持数据类型最多的Switch了。

支持区间运算符

不仅仅是循环结构里可以用区间运算符,在Switch里同样可以用区间运算符:
var i = 15
switch i {
    case 0 ... 10:
        "0~10"
    case 11 ... 20:
        "11~20" //被输出
    default:
        "default"
}
对某个数值区间进行批量匹配,这样是不是很酷?浮点数也同样支持区间运算符。

支持元组

作为被大大增强的Switch,元组也是被支持的:
let request = (true,"success")
switch request {
    case (true, "success"):
        "success"   //被输出
    case (false, "failed"):
        "failed"
    default:
        "default"
}
使用元组和使用其他数据类型一致,不过元组还有一项特点,对于不想关心的值,可以用下划线_跳过,如:
let (name,  _, age) = ("Bannings" ,true, 22)
那么在使用Switch时,同样支持这项特性:
let request = (true,"success")
switch request {
    case (_, "success"):
        "success"   //被输出
    case (false, _):
        "failed"
    default:
        "default"
}
对于不关心的值跳过,只要满足另一个值就行了。需要注意一点的是,如果元组中的值也是数字类型,那么也是可以用区间运算符的:
let request = (10,"failed")
switch request {
    case (_, "success"):
        "success"
    case (1 ... 10, _):
        "1~10"    //被输出
    default:
        "default"
}

Value Binding

针对元组,Switch还支持类似于Optional Binding的Value Binding,就是能把元组中的各个值提取出来,然后直接在下面使用:
let request = (0,"success")
switch request {
    case (0, let state):
        state    //被输出:success
    case (let errorCode, _):
        "error code is \(errorCode)"
}  // 涵盖了所有可能的case,不用写default了
这样也是可以的:
let request = (0,"success")
switch request {
    case let (errorCode, state):
        state    //被输出:success
    case (let errorCode, _):
        "error code is \(errorCode)"
}
把let放在外面和放在里面为每一个元素单独写上let是等价的。
当你在一个case里使用Value Binding的时候,如果你同时也在它的上一个case里使用了fallthrough,这是编译器所不允许的,你可能会收到这样一个编译错误:
 
只要把下面的errorCode去掉就行了,当然,考虑好自己的逻辑。

支持额外的逻辑判断

在使用Switch语句时,Switch会适当地导向相应的case部分,这其实就相当于做了一次逻辑判断,但Swift的Switch语句还支持额外的逻辑判断:
let request = (0,"success")
switch request {
    case (0, let state) where state != "success":
        state
    case (let errorCode, _):
        "error code is \(errorCode)"//被输出:"error code is 0"
}
这同样很酷,相信在某种情况下会派上大用场。

总结

Swift对Switch进行了大大增强,使Switch的灵活性得到了很大提升,这是激动人心的改变,但是如果掌控不好其中的变化,可能会使你在进行错误排查时增加难度,也会使代码复杂度变高。在适当地时候灵活运用,保持头脑清晰总是有益的。

Swift_2_控制语句

阅读数 660

没有更多推荐了,返回首页