笔记整理(Swift基本语法一)
2019-07-11 本文已影响0人
贵族小猫钓鱼
类型推导
1. 如果定义一个标识符时有直接进行赋值,那么标识符后面的类型可以省略
2. 因为Swift 有类型推导,会自动根据后面的赋值来决定前面的标识符的数据类型
3. 可以通过option+鼠标左键 来查看变量的数据类型
基本运算
Swift 中在进行基本运算的时候必须保证类型一致,否则会报错
- 相通类型之间才能进行运算
- Swift 中没有隐私转换
数据类型类型转换
- Int 类型转换成Double类型,使用:Double标识符
- Double 转为Int类型,使用:Int标识符
let a = 4
let b = 2.34
let c = Double(a) + b
let d = a + Int(b)
逻辑分支
一、分支介绍
- 分支即if/switch/三元表达式(三木运算符)等判断语句
- 通过分支语句可以控制程序的执行流程
二、if分支语句
- 和OC里if语句有一定的区别
- if后面的小括号可以省略
- 在Swift的判断语句中必须有明确的真假
- 不再有非0即真
- 必须有明确的Bool值
- Bool有两个取值:false/true
1.错误写法
let a = 3
if a {
不再是非零即真
}
2. 正确的写法
if a > 2{
必须明确指定真假
}
三、三目运算符
let a = 20
let b = 30
let result = a > b ? a : b
四、guard的使用
- guard的Swift2.0 新增加的语法
- 它与if语句非常的相似,它设计的目的是提高程序的刻度去性
- guard语句必须带有else语句,它的语法如下:
- 当条件表达式为true时候跳过else语句中的内容,执行语句组的内容
- 条件表达式为false时候执行else语句中的内容,跳转语句一般return、break、continue、throw
写法
guard 条件表达式 else{
break
}
如:
var age = 18
func online(age : Int)->void{
guard age> 18 else{
print("未满十八岁禁止上网")
return
}
print("符合要求")
}
五、Switch 用法
- switch 后面的()可以省略
- case语句结束后,break可以省略
- case后面可以判断多个条件,多个条件以
,
隔开 - Switch特殊用法
//基本用法
let sex=1 //0: 男 1:女
switch sex {
case 0:
print("男")
case 1:
print("女")
default: break
print("其他")
}
//<!--case后面多个条件-->
0: 男 1:女
let sex=1
switch sex {
case 0,1:
print("正常人")
default: break
print("非正常人")
}
//Switch 特殊用法
1. switch 可以判断浮点型
let a = 3.14
switch a{
case 3.14:
print("正确")
default:
print("错误")
}
2. Switch 可以判断字符串
let str = "男"
switch str{
case "男":
print("是个哥哥")
case "女":
print("是个姐姐")
default:
print("其他")
}
3. Switch 支持区间判断
开区间:0..<10 表示0到10 不包含10
开区间:0...10 表示0到10 包含10
let score = 79
switch score {
case 0..<60:
print("成绩不及格")
case 60..<70:
print("成绩及格")
case 70..<90:
print("成绩良好")
case 90..<99:
print("成绩优秀")
default:
print("满分")
}
循环的介绍
- 在开发中经常会需要循环
- 常用的循环for/while/repeat while
for 循环的写法
- 常规写法
for var i = 0; i < 5; i++{
}
- 区间for循环的写法
for i in 0...20{
<!--0到20包含20, 如果不需要获取下标i可以换成"_"-->
}
while循环
let a = 3
错误的写法:
while (a){
a 指定条件,不存在非零即真,另外() 可以省略
}
正确的写法:
while a>2 {
}
repeat while 循环
类似于OC中do while循环
let a = 3
repeat {
a++
print(a)
}while a<10
字符串的使用
- OC和Swift中关于字符串的区别
- OC中字符串类型为NSString,Swift中为String
- OC中字符串使用@""包裹 Swift中使用""
- 使用String的原因
- String为结构体,性能更好
- NSString是一个OC对象,性能略差
- string 支持直接遍历
- Swift 提供了String 和 NSStinrg之间的无缝对接
字符串遍历
let str = "helloWord"
var arr = Array<Any>()
for c in str.characters{
arr.append(c)
}
print(arr)
打印结果:
["h", "e", "l", "l", "o", "W", "o", "r", "d"]
字符串拼接
let str1 = "好好学习"
let str2 = "天天向上"
let str = str1 + str2
//<!--字符串和变量拼接-->
let name = "赵四"
let age = 34
let height = 1.66
print("my name is \(name) age \(age) height \(height)")
//<!--字符串的格式化-->
let min = 2
let second = 8
//<!--第一种方式-->
let timeStr = String(format: "%02d:%02d", min,second)
//<!--第二种方式-->
let mins = 2
let second = 8
let timeStr = String(format: "%02d:%02d", arguments: [mins,second])
print(timeStr)
输出结果:02:08
字符串截取
let urlString = "www.baidu.com"
let header = (urlString as NSString).substring(to: 3)
let md = (urlString as NSString).substring(with: NSMakeRange(4, 5))
let footer = (urlString as NSString).substring(from: 10)
print("头部:\(header)" ,"中间:\(md)","尾部:\(footer)")
输出结果:头部:www 中间:baidu 尾部:com
数组介绍
- 数组(Array)是一串有序的由相同元素构成的集合
- 数组中的集合元素是有顺序的,可以重复出现
- Swift的数组的类型是Array,是一个泛型集合
数组初始化
数组分为可变数组和不可变数组
1. 使用let修饰的数组为可变数组
2. 使用Var修饰的数组为可变数组
数组的定义方式
定义不可变数组
let Arr = ["小米","三星","苹果","华为"]
可变数组
var arrM = [String]()
//增加
arrM.append("12")
//删除
arrM.remove(at: 1)
//修改
arrM[0]= "锤子"
查看
for name in arrM{
print(name)
}
合并数组
for name in Arr{
arrM.append(name)
}
字典介绍
- 字典中的元素由两部分组成,一个是键(key),一个是值(value)
- 字典中的键是不可以重复的,键和值必须成对出现
- Swift中字典类型是Dictionary是一个泛型集合
字典的初始化
字典分为可变字典和不可变字典
1. 使用let修饰的数组为可变字典
2. 使用Var修饰的数组为可变字典
数组的定义方式
不可变字典
let dict = ["name":"小王","age":"23","sex":"男",height:165.3]
可变字典
增加
var dictM = [String:Any]()
dictM["name"]="张三"
dictM["age"]=15
dictM["sex"]="男"
dictM["height"]=174.3
删除
dictM.removeValue(forKey: "name")
修改
dictM["name"]="李四"
遍历字典
for key in dictM.keys{
print(key)
}
for vaule in dictM.values {
print(vaule)
}
for (key,vaule) in dictM{
print("\(key) :\(vaule)")
}