内容总结
Swift中的数据类型
Swift中的逻辑分支
- if分支
- guard
- switch分支
- switch介绍及基本使用
- switch的语法补充
- switch判断浮点类型
- switch判断字符串类型
- switch判断区间类型
Swift中的数据类型
-
Swift中的数据类型也有:整形、浮点型、对象类型、结构体类型等等
-
先学习整形和浮点型
-
整形
- 有符号
- Int8:有符号8位整形
- Int16:有符号16位整形
- Int32:有符号32位整形
- Int64:有符号64位整形
- Int:和平台相关(默认Int类型,相当于OC的NSInteger)
- 无符号
- UInt8:无符号8位整形
- UInt16:无符号16位整形
- UInt32:无符号32位整形
- UInt64:无符号64位整形
- UInt:和平台相关(常用,相当于OC的NSUInteger)(默认)
-
浮点型
Float :32位浮点型
Double:64位浮点型
-
类型推导
-
如果在定义一个标识符的时候,有直接给该标识符进行赋值,那么可以将标识符后面的类型省略
-
编译器会根据我们后面的赋值的类型,推导出前面标识符的类型,这个过程叫类型推导
-
并且可以通过 option + 鼠标左键来查看标识符的类型
//利用类型推导省略 标识符:数据类型 示例 并且Xcde编译器在你声明标识符的时候的推荐的也是省略数据类型
let a = 24
var b = 2.44
let view = UIView()
let btn = UIButton()
-
Swift中的基本运算
-
在Swift中进行基本运算的时候必须保证类型一致,否则会报错
-
因为Swift中没有隐式转换
-
数据类型的转化
- Int类型转成Double类型:Double(标识符)
- Double类型转成Int类型:Int(标识符)
let i = 20 //整形
let d = 15.2 //Double类型
//let p = m + n 错误写法 会报错
//必须进行类型转换 让运算标识符的类型一直
let dp = Double(i) + d // 35.2
let ip = i + Int(d) // 25
Swift是强类型语言
-
注意:即使同为浮点型,如果一个是Double 一个是CGFloat一样也不能直接运算
let d2 :Double = 2.55
let f :CGFloat = 3.22
//let resalt = d2 + f 错误写法 会报错
//正确写法
let resault = d2 + Double(f)
逻辑分支
-
逻辑分支的介绍
-
分支 if / switch / 三目运算符等判断语句
-
通过分支语句可以控制程序的执行流程
-
if分支语句
-
和OC中的if语句有一定的区别
-
判断语句可以不加()
-
在Swift的判断语句中必须有明确的真假
- 不再有非0(nil)即真 Bool(false/true)
- 必须有明确的Bool值
- Bool有两个取值:false/true
if的用法 OC的中的用法
if(a>0){
}
if(a){//非0 即真 只要a 不是0或者空都能来到这个判断
}
let num = 1
if num > 0 { //可省略条件后面的() ,并且条件要明确
print("a 大于0")
}else if num == 0 {
print("a =0")
}else {
print("a 小于 0")
}
if a != 0 {
print("a 不等于0")
}
-
guard的使用
-
guard是Swift2.0新增的语法
-
它与if语句非常像似,它设计的初衷是提高代码的可读性
-
guard必须要带有else语句,语法如下
- 当条件表达式为true的时候跳过else语句的内容,执行语句组(下面的)内容
- 条件表达式为false的时候执行else语句中的内容,跳转语句一般是 return break continue throw
语法
guard 条件表达式 else {
break
}
语句组
例子 多重条件判断一个人能不能上网
let age = 20
let haveIdCard = true
let haveMoney = true
func canOnline (age:Int) {
if age > 18 {
if haveIdCard {
if haveMoney {
print("可以上网")
}else{
print("取钱")
}
}else{
print("拿身份证")
}
}else{
print("不能上网")
}
}
canOnline(age: age)
可以看出多重判断之后 该函数看起来很复杂 代码阅读性变差
改成 guard
func guardCanOnline (age:Int) {
guard age>=18 else {
print("不可以上网")
return
}
guard haveIdCard else {
print("回家拿身份证")
return
}
guard haveMoney else {
print("没钱上什么网")
return
}
print("开心上网吧")
}
对比上例 实现一样的需求 这样这个判断上网的函数是不是看起来清爽很多呢?
switch分支
-
switch的介绍
-
switch作为选择结构中必不可少的语句在Swift中地位也很重要
-
但是苹果对switch进行了大大的加强,使其拥有其他语言中没有的特性
- switch的简单使用
- 和OC的区别
- switch后面的()可以省略
- case语句结束时可以不加break也不会产生case穿透
-
switch的基本使用
- switch()可以省略
- case结束可以不break
-
基本使用补充
- case后面可以加多个条件
- 如果希望产生case穿透,可以在case结束时加上fallhrough
- 可以判断多种类型
代码示例 基本使用
//sex 代表性别 0 男 1 女
let sex = 0
switch sex {
case 0:
print("boy")
case 1:
print("girl")
default:
print("人妖啊")
}
-
switch基本语法的补充
- 在Swift中,switch后面case可以判断多个条件
- 如果希望case结束的时候可以产生case穿透,可以在case结束后加上fallthrough
switch sex {
case 0,1:
print("正常人")
fallthrough
default:
print("人妖啊")
}
switch判断其他类型
let pai = 3.14
switch pai {
case 3.14:
print("与π相等")
default:
print("与π不相等")
}
let num1 = 20
let num2 = 30
let oprationStr = "+"
switch oprationStr {
case "+":
print(num1+num2)
case "-":
print(num1-num2)
case "*":
print(num1*num2)
case "/":
print(num1/num2)
default:
print("非法的操作符")
}
-
判断区间
- 区间
- 半开区间 0~9 0..<10
- 闭区间 0~9 0...9
let score = 90
switch score {
case 0..<60:
print("不及格")
case 60..<80:
print("及格")
case 80..<90:
print("良好")
case 90...100:
print("优秀")
default:
print("不合理的成绩")
}
while和do while循环
int a = 0
while (a>0) {
a++;
}
while(a) {
}
-
Swift中
- while后面可以省略()
- 没有非0即真的说法 与前面提到的一样Bool(true/false)
var m = 0
while m <10 {
m+=1 //Swift3.0中没有了 i++ 这种语法
print(m)
}
//Swift中没有了do while 语法 改成了 repeat while
repeat {
m-=1
print(m)
}while m > 0
后续
给能看到文章最后的你一个赞,肯定了乐于学习的你。愿我们在学习的路上一去不复还
联系我,点赞也行吐槽也迎
QQ 351795515
网友评论