1、常量与变量
- let:声明一个常量,一旦设定就不能改变。
- var: 声明一个变量,变量的值可以随便更改的。
使用原则:为保证数据的安全性尽量先用 let,只有需要改变的时候才使用 var
常量
/*
常量定义格式
* 声明符号 常量名称: 类型标注
* let number: Int
*/
let number: Int = 10
//number = 9//常量不能改变
定义变量
/*:
定义变量格式
* 声明符号 变量名称: 类型标注
* var number: Int
* 特点: 变量的值可以随意更改
* 注意: 一般来说你很少需要写类型标注。如果你在声明常量或者变量的时候赋了一个初始值,Swift可以推断出这个常量或者变量的类型
*/
var number1: Int = 9
number1 = 8
2、类型推断
类型安全
- Swift 是一个类型安全(type safe)的语言, 它会在编译你的代码时进行类型检查(type checks),并把不匹配的类型标记为错误。这可以让你在开发的时候尽早发现并修复错误
- swift 对数据类型要求异常严格, swift 中任何时候,都不会做
隐式转换
,如果要对不同类型的数据进行计算,必须显示类型转换
注意:
- 结合数字类常量和变量不同于结合数字类字面量。字面量8可以直接和字面量3.1415926相加,因为数字字面量本身没有明确的类型。它们的类型只在编译器需要求值的时候被推测
- Double和CGFloat也需要转换
转换示例
let number4 = 7
let number5 = 3.0
//let result = number4 + number5//不能这样,因为类型不一至
//强制转换
let result = Double(number4) + number5
//真实的数值(字面量)本身没有明确的类型,它们的类型只在编译器需要求值的时候被推测.
//任何变量都可单独与字面量想加,不会产生类型冲突
let result1 = number5 + 7
//字面量与字面量间也可相加
let sum = 9.7 + 2
//注意
//Swift中,Double与float CGFloat都是不同类型的,不能相加,要强制转换
let point = CGPointMake(2, 9)
let x: CGFloat = point.x
let temp = 9.2//Double类型
let sumValue = temp + Double(point.y)//把CGFloat转换成Double类开
3、元组
- 元组(tuples)把多个值组合成一个复合值
- 将多个相同或者不同类型的值用一个小括号括起来就是一个元祖
- 元组内的值可以是任意类型,并不要求是相同类型
- 作为函数返回值时,元组非常有用,可以用来返回多值
注意:
- 元组在临时组织值的时候很有用,但是并不适合创建复杂的数据结构。如果你的数据结构并不是临时使用,请使用类或者结构体而不是元组
//创建元组数据
let tuples = (9.3,2,3)
//访问,通过下标
tuples.0
tuples.1
//指定元素名称
let tuple = (a: 2.3,b: 9)
tuple.a
tuple.b
//:分解元素
let (intValue, doubleValue) = (4, 3.14)
intValue
doubleValue
4、 区间判断
判断区间(...与..<这两个字运算符 不能有空隔)
- 闭区间:
0...10
取值范围0~10 包含头包含尾
- 半闭区间:
0..<10
取值范围0~9 包含头不包含尾
//let range = 0..<18//半闭区间
//let range = 18..<30
let range = 18...20//闭区间
5、分支(if/三目运算/switch)
5.1 分支if
- 只能以
Bool
作为条件语句Swfit中逻辑值只有两个true/false,如果你在需要使用Bool类型的地方使用了非布尔值,Swift 的类型安全机制会报错
- 条件语句不需要加()
- {}不能省略
- Swift中if分支的模式可以使用where语句来判断额外的条件
- 其它和OCif一样
let number = 10
if number == 10 {
print(number)
}
if number >= 10 && number <= 20 {
print("number在10和20之间")
}
5.2 三目运算符
- 三目运算符的特殊在于它是有三个操作数的运算符, 它简洁地表达根据问题成立与否作出二选一的操作
- 格式:
问题
?答案1
:答案2
- 注意:过度使用三目运算符会使简洁的代码变的难懂。我们应避免在一个组合语句中使用多个三目运算符
let value = 2
//?与右括号之间用空格隔开,不然会报错.
//书写,每个字符间尽量都隔开
let result = (value > 1) ? 3 : 9
5.3 Switch
- case后面可以不添加break,不会贯穿
- Swift中如果想贯穿必须使用fallthrough
- Swift中只有满足所有条件才能忽略default,OC中可以不写default
- OC中default位置可以随便放,Swift不可以
- OC中在case中定义变量需要加大括号, 否则作用域混乱, Swift不用加大括号
- Swift中的switch可以判断
字符串
、区间
和元祖
- Swift中case 分支的模式可以使用where语句来判断
额外的条件
示例1- Switch常规判断
let age = 6
switch age {
case 2,6://case中可以包含多个条件
print("儿童")
case 12:
print("小学")
case 18:
print("成年")
case 20:
fallthrough//穿透
case 24:
print("可以结婚了")
//Swift中每一个 case 分支都必须包含至少一条语句
default:
print("other")
}
示例2- Switch判断元组
let point = (50, 50)
switch point {
case (0, 0):
print("原点")
case (50, 50):
print("中点")
case (100, 100):
print("右下角")
default:
print("other")
}
示例3- 判断区间
let range = 18...20//闭区间
switch range {
// case 0..<18:
// print("未成年")
// case 18..<30:
// print("成年人")
// default:
// print("老炮")
case 0...17:
print("未成年")
case 18...30:
print("成年人")
default:
print("老炮")
}
示例4- 判断字符或字符串
let rank = "A"
switch rank {
// case "A":
// fallthrough
// case "B":
// print("还可以")
case "A", "B":
print("还可以")
case "C":
print("差")
default:
print("回家吧")
}