【iOS 基础学习-Swift 一】

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 是一个结构体,性能更高
  1. String目前具有了绝大多数NSString的功能
  2. 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

猜你喜欢

转载自blog.csdn.net/sinat_30220049/article/details/107177805