XCode 相关
//MARK: - 视图生命周期
//TODO: 标记
//FIXME:此处修改
Swift 基础语法入门
一、变量和常量
let :常量
var :变量
1.Swift 也是自动推导类型:option + click 可以直接查看推导的类型
2.在Swift 中对类型要求异常严格,任何不同类型的数据之间,不允许直接运算,不会做任何隐式的转换,所有的类型确定,都要由程序员负责
二、Optional 可选项
1.概念:要么有值,要么为空
2.规则:参与计算之前需要解包
3.符号:(?)定义可选项;(!)对可选项解包
4.常量可选项使用前需要设置初始值
5.变量可选项默认是nil
三、控制流
if esle :1.条件不需要() 2.语句必须有{}
三目运:
/*1.*/x > y ? print() : ()//空执行
/*2.可选项的三种判断方式*/
//(1):??
func demo(x:Int?, y:Int?){
/*
??:是一个简单的三目
- 如果有值,使用值
- 如果没有值,使用??后面的值代替
- 操作符的优先级'低'
*/
print((x ?? 0) + (y + ?? 0))
}
//(2):if let /var 连用语法,目的是判断值
func demo(){
let oName:String? = "老王"
let oAge:Int? = 10
//if let 连用,判断对象的值是否为nil
//if var 连用,可以改值
if let name = oName , age = oAge {
//进入分支之后,name 和 age 一定有值,不需要解包
print(name + String(age))
}else{
print("name或age 为nil")
}
}
//(3):guard 守卫/守护
func demo(){
let oName:String? = "老王"
let oAge:Int? = 10
//guard let 守护一定有值,如果没有直接返回
guard let name = oName , age = oAge
else{
print("姓名或者年龄为Nil")
return
}
//代码执行致辞,name 和 age一定有值!
print(name + String(age))
//通常判断是否有值之后,会做具体的逻辑实现,通常代码多!
}
//(技巧)
func demo(name:String? ,age:Int?){
//guard let & if let 的技巧
//使用同名的变量接受值,在后续使用的都是非空值,不需要解包
//好处,可以避免起名字的烦恼
if let name = name , age = age {
print(name + String(age))
}
guard let name = name ,age = age else{
print("姓名或年龄为nil")
return
}
print(name + String(age))
}
Switch:
1.可以针对任意类型的值进行分支
**2.一般不需要break,只有不执行的需要,例子:case 10 : break **
3.如果需要多值,使用’,’ ,例子:case 10 , 20 :
4.where子句
func demo(){
switch point {
case let p where p.x == 0 && p.y == 0:
print("原点")
case let p where p.x == 0:
print("Y轴")
case let p where p.y == 0:
print("X轴")
case let p where abs(p.x) == abs(p.y):
print("对角线")
default:
print("其他")
}
}
四、for循环
- Range和开区间
- _可以表示忽略
//正序遍历
func demo(){
//变量i在[0,5) 循环
for i in 0..<5{
print(i)
}
//变量i在[0,5] 循环
for i in 0...5{
print(i)
}
}
//反序遍历
func demo(){
//reversed 反转
for i in (0..<10).reversed(){
print(i)
}
}
五、字符串
- 1.字符串的长度
- 2.字符串的拼接
- 3.字符串的格式化
- 4.字符串的子串
as 的作用(类型转换)
- String 是一个结构体,性能更高
- String目前具有了绝大多数NSString的功能
- String支持直接遍历
- NSString 是一个OC对象,性能略差
字符串的遍历
func demo(){
let str: String = "我要飞得更高"
for c in str.characters{
print(c)
}
//Swift5 以后直接 使用str
for s in str{
print(s)
}
}
字符串的长度
func demo(){
let str = "Hello World"
//1> 返回指定字节编码的对应的字节数量
print(str.lenthOfBytes(using: .utf8))
//2> 字符串长度
print(str.characters.count)
//3> 使用NSString中转
let ocStr = str as NSString
//4.5.0中使用str.count
print(str.count)
}
字符串的拼接
func demo(){
let name = "老王"
let age = 18
let title:String? = "BOSS"
print(name + "\n" + age)
let str:String = "Hello"
let str2 = "Hello"
print(str + "\n" + str2)
//结果:
/*Hello
Hello
*/
}
字符串追加
var str = "Hello"
str.append(" World")
print(str)
//结果:Hello World
字符串格式化
let str = String(3)
let str1 = String(5.0)
print(str,str1)
//结果 : 3 5.0
let str = String(format:"第%d课程",1)
let str1 = String(format:"价格%f",5.68)
print(str,str1)
//结果:第1课程, 价格5.6800000
let str2 = String(format:"价格 %2f ", 5.68)
print(str2)
//价格5.68
判断字符串是否为空
let str = "swift"
let str1 = ""
print(str.isEmpty)
//结果:false
print(str1.isEmpty)
//结果:true
字符串操作
1.获取首字符
let str = "this"
print(str[str.startIndex])
//结果:t
2.删除首字符
let str = "ABC"
var.removeFirst()
print(str)
//等价
str.remove(at:str.startIndex)
print(str)
//结果:BC
3.删除指定位置
varstr = "ABCDEFGH"
str.remove(at:str.index(str.startIndex, offsetBy:2))
print(str)
//结果:AB-DEFGH
4.删除最后一个字符
varstr = "ABC"
str.removeLast()
print(str)
//结果:AB
5.删除所有内容
var str = "ABCDEFGH"
str.removeAll()
6.删除头尾指定位数内容
var str = "ABCDEFGH"
str.removeFtist(2)
str.removeLast(2)
print(str)
//结果:CDEF
判断字符串相等
let str:String = "Hello World"
let str1 = "Hello"
let str2 = "Hello"
//需要知道大小
let isSame = str1.compare(str)
//枚举 ComparisonResult -1 0 1
print(isSame.rawValue)
//结果:-1
print(str1.compare(str2).rawValue)
//结果:0
//只需要知道内容是否相等
print(str1 == str2)
//结果 :true
判断字符串包含另一个字符串
let str = "Hello"
let str1 = "Hello World"
let rec = str1.contains(str)
print(rec)
字符串分割
let str = "Hello World"
let arr = str.split(separator:"")
print(arr)
//结果:[“Hello”,"World"]
数组拼接字符串
let arr = ["Hello","World"]
let joined = arr.joined()
print(joined)
//结果:HelloWorld
let sepJoined = arr.joined(separator:"----")
print(sepJoined)
//结果:Hello---World
字符串截取
//头部截取
let str = "sdjfkaksdjf"
let str1 = str.prefix(2)
print(str1)
//结果:sd
//尾部截取
let str2 = str.suffix(3)
print(str2)
//结果:d
//range 截取
let index = str.index(str.startIndex, offsetBy:3)//获取索引
let index2 = str.index(str.startIndex, offsetBy:5)
let str5 = str[index...index2]
print(str5)
//结果:fka
//获取指定位置字符串
let range = str.range(of:"ak")
print(str[str.startIndex..<range.lowerBound])
//结果:sdjfk
print(str[str.startIndex..<range.upperBound])
//结果:sdjfkak