控制流(即OC中的判断语句)
和OC的区别
1.if后面的小括号可以省略,大括号不能省略
2.swift中if后面的条件语句没有"非0即真"的概念
例子:
let a = 10
if a > 0{
print("a > 0")
}
可选类型的判断 if-let
if-let:先判断可选类型是否为空,不为空创建一个局部常量来接收此时可选类型的值,在执行代码块,否则不执行代码块
例子:
let a:Int? = 11
if a > 0{
print("b = \(a)")
}
let a1:Int? = 10
if let b = a1{
print("b = \(b)")
}
//if-let-where
//where是对定义出来的常量再做一层判断
例子:
if let c = a where c > 5{
print("a > 5")
}
//guard 守护
//是判断可选类型是否有值,没值的话执行else里面的代码块,有值的话不执行代码块,在下面执行
例子:
func demo ()
{
let a:Int? = 10
guard let d = a else {
print("a = nil")
return
}
print("d = \(d)")
}
// ??->空运算标识符
//??->如果可选类型值不为空的话,会帮我们进行强制解包之后参与运算,如果为nil的话则会提供一个默认值给我们
例子:
var value:Int?
let value1 = (value ?? 5) + 20
print("value1 = \(value1)")
switch
//switch 后面的小括号可以省略
//case 后面的break可以不写,不会造成穿透的效果
//默认default必须添加,而且只能加在最后面
//case后面至少有一条执行语句,case后面的大括号可以省略不写
//switch 不再像OC那样只局限于整型的选择,浮点型,字符等
例子:
let a = 10
switch a
{
case 2:
print("a = 2")
case 3:
print("a = 3")
case 10:
print("a = 10")
print("a = 10")
default:
print("a = nil")
}
循环
for循环
//for 后面的小括号不能写,大括号必须加上
//for -in循环的开区间和闭区间
//for()在swift2.2后面就废弃了
写法一:
for var i = 0;i < 10;i++ {
print(i)
}
for var i = 0;i < 10;i++ {
print(i)
}
//写法二 (闭区间)
for i in 0...10 {//[0,10]
print(i)
}
for i in 0..<10 {//[0,10)开区间
print(i)
}
函数
//swift里面允许函数嵌套,并且外部不可见
//调用的时候尽量不采用self
//类名调用的函数前面加上class
//如果一个类只要求在本类中调用,不希望外部可见,就加上private,UI控件的响应事件不要加上private修饰
例子:
func demo02()->(){
print("无参无返回值02")
}
//有参数无返回值
//格式:func 函数名(外部访问参数 参数:参数类型......){}
//非第一个参数如果没有外部访问参数的话会将形参当成外部访问参数
func lengthOfString(str1:String,str2:String){
print("\(str1)和\(str2)的长度是\(str1.characters.count + str2.characters.count)")
}
//无参数有返回值
func demo04()->String{
return "ss"
}
//有参数有返回值
//格式:func 函数名(参数列表...)->返回值类型
func demo05( var str1:String,str2:String)->String{//实例方法 加上class为类方法
str1 += str2
return str1
}
闭包:
闭包相当于c里面的block,封装了一段有特定功能的代码块
闭包一样可以当函数
//闭包的格式:
/*
{
(输入参数列表...)->返回值类型
in
闭包里面执行的代码块
}
例子:
//无参无返回值闭包
let closure = {
()->()
in
print("这是一个无参无返回值的闭包")
}
//有参数无返回值
let closure1 = {
(str:String)->()
in
print("这是一个输入参数为\(str)的闭包")
}
//无参有返回值
let closure2 = {
()->(Int)
in
let s = "sss"
return s.characters.count
}
//有参有返回值类型
let closure3 = {
(str1:String,str2:String)->Int
in
let str3 = "\(str1)\(str2)"
return str3.characters.count
}