二、swift3.0常量和变量+流程控制

一、常量和变量
在Swift中规定:在定义一个标识符时必须明确说明该标识符是一个常量还是变量
使用let来定义常量,定义之后不可以修改
使用var来定义变量,定义之后可以修改
注:
1、在开发中定义标志符时,建议优先使用常量(let),如果需要修改再修改为变量(var),这样会更安全
2、常量保存的对象的内存地址不能修改,但是可以通过指针获得对象修改它的属性

注:swift是一门强类型语言:1、所有的变量必须先声明、后使用;2、指定类型的变量只能接受类型与之匹配的值。

//创建常量对象
let view : UIView = UIView()
view.backgroundColor = UIColor.red

view.frame = CGRect.init(x: 0, y: 0, width: 10, height: 10)

view.isHidden = true

//view = UITextView();   错误写法,因为view标志符为常量

二、swift中的基本数据类型
整型
有符号
Int8 : 有符号8位整型
Int16 : 有符号16位整型
Int32 : 有符号32位整型
Int64 : 有符号64位整型
Int : 和平台相关(默认,相当于OC的NSInteger)
无符号
UInt8 : 无符号8位整型
UInt16 : 无符号16位整型
UInt32 : 无符号32位整型
UInt64 : 无符号64位整型
UInt : 和平台相关(常用,相当于OC的NSUInteger)(默认)


浮点型
Float : 32位浮点型
Double : 64浮点型(默认)
注:在swift中不存在基本数据类型,都是结构体
1、swift中的类型推导
swift是强类型的语言,任何一个标志符必须有一个明确的类型;
在swift中定义标志符时,可以省略类型,通过“option + 点击”查看其类型,编译器会进行自动类型推导。

2、swift中的基本运算
swift中进行基本运算,必须保证类型一致,相同类型的才能运算,没有隐式转换。
Double():表示‘结构体’的构造函数

let a1 = 1.22
let b = 1
let c = a1 + Double(b)   
print(c)

三、逻辑分支
我们可以通过分支语句来控制程序的执行流程,当条件较为简单且可能的情况很少时,使用if语句,否则考虑使用switch语句。
1、if分支语句
注意点:

条件语句可以不加“()”

即使执行语句只有一行语句,也不允许省略花括号

条件语句必须有明确的BOOL值,不能是非零即真

let a = 10
if a < 100 {
    print("a < 100是真的,a = ",a)
}

let score = 90
if score <= 100 && score > 90 {
    print("高分");
} else if score <= 90 && score > 80 {
    print("优")
} else if score <= 80 && score > 70 {
    print("达标")
} else {
    print("及格")
}

let m = 10
let n = 20
let result = m > n ? m : n
print(result)

注:三目运算时:let result = m > n ? m : ()。此时的“()”表示空执行
       if let连用,用于判断变量的值是否为nil,若有则直接使用,不需要进行解包
       if var连用,可以对可选类型的值进行修改

2、guard的使用
guard是Swift2.0新增的语法
它与if语句非常类似,它设计的目的是提高程序的可读性
guard语句必须带有else语句,它的语法如下:
当条件表达式为true时候跳过else语句中的内容,执行语句组内容
条件表达式为false时候执行else语句中的内容,跳转语句一般是return、break、continue和throw
guard必须在函数中使用,guard可以很好的解决if逻辑嵌套阅读性差的问题
注:可以通过guard let连用,进行变量值的守护一定有值,一般用于处理可选绑定

func canSleep2(age: Int) {
    guard age < 20 else {
        print("可以睡觉")       //条件语句为fause时调用
        return
    }
    print("不可以睡觉")
}

canSleep2(age: 20)

func canWork(age : Int, educate : NSString) {
    guard age > 18 else {
        print("不可以工作")
        return
    }
    guard educate .isEqual(to: "大学生") else {
        print("不可以工作")
        return
    }
    print("可以工作")
}

canWork(age: 19, educate: "大学生")

func test() {
    let a : String? = nil
    
    guard let b = a else {
        print("错误")
        return
    }
    
    print(a!)
    
}


3、switch的使用
switch的特点:
switch后可以不跟() 
case后可以不跟break(默认会有break),如果没有任何语句则需要加上break
可以通过fallthrough关键字来实现switch穿透
case后面可以有多个条件判断
switch可以判断浮点型,字符串

let score = 88
switch score {
case 100, 90:
    print("判断1")
case 88, 77:
    print("判断2")
    fallthrough
default:
    print("默认")
}

注:switch可以判断区间

let age = 30
switch age {
case 0..<18:       //开区间:[0, 18)
    print("未成年")
case 18..<30:
    print("成年人")
case 30...50:       //闭区间:[30, 50]
    print("壮年")
default:
    print("不符合要求")
}

func demo() {
    let point = CGPoint.init(x: 10, y: 20)
    switch point {
    case let p where p.x > 0 && p.y > 0:
        print("在第一象限")
    default:
        print("不在第一象限")
    }
}

switch可以进行元组匹配

let point = (x: 1, y: -1)

switch point {
case (0, 0):
    print("在原点上")
case (_, 0):
    print("在x轴上")
case (0..

case的值绑定:通过临时变量或者常量访问switch表达式的值

let socre = 178

switch socre {
case 91...100:
    print("优秀")
case let grade:
    print("\(grade)不合法")
}

let point = (2, 2)

switch point {
case (let x, 0):
    print("在x轴上")
case (let x, let y):
    print(x, y)
default:
    break
}

case的where子语句:可以给case增加额外的判断

let point = (-3, 3)

switch point {
case (0, 0):
    print("在原点")
case let (x, y) where x < 0 && y > 0:
    print("在第3象限: x = \(x), y = \(y)")
default:
    break
}


四、循环的使用

1、for循环

//基本写法在swift3.0.2中不能使用,i++和++i在swift3.0被取消
//for var i = 0; i < 10; i = i + 1 {
//    print(i)
//}

for i in 0..<10 {   //打印10次
    print(i)
}

for i in 0...10 {   //打印11次
    print(i)
}

//注:如果swift中一个标识符不需要使用,可以用"_"代替
for _ in 0..<3 {
    print("hello world!")
}

//反序遍历
    for i in (0..<10).reversed() {
        print(i)
    }
    
    //范围定义是一个固定格式
    let i = 0..<10
    print(i)
    
    let j = 0...10
    print(j)


2、while循环

repeat while先执行循环体,再判断条件。

var a = 11
while a > 10 {
    print("此处要避免死循环")
    a = a - 1
}

a = 20
//do while替换为repeat while
repeat {
    print("a < 10")
    a = a - 1
} while a > 10







你可能感兴趣的:(swift)