一、常量和变量
在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)
条件语句可以不加“()”
即使执行语句只有一行语句,也不允许省略花括号
条件语句必须有明确的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("默认")
}
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..
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
}
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)
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