1.创建窗口
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let myview=UIView(frame: CGRect(x: 0, y: 20, width: 200, height: 150))
myview.backgroundColor=UIColor.red
view.addSubview(myview)
//let imageview=UIImageView(image:UIImage.init(named: "girl01"))
let imageview=UIImageView(image:UIImage(named: "girl01"))
imageview.center=view.center
view .addSubview(imageview)
}
}
2.可选类型
?是定义时用的
!是解包(准备运算)的时候用的
func demo2(){
let x:Optional=10
let y:Int?=10
print(x!,y!)
}
3.if let/var 连用语法
if let/var 连用语法目的是判断值
if let连用,判断对象的值是否为nil,{}内一定有值,不需要解包
if var连用,{ }可以对值进行修改
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
demo2()
}
func demo2(){
let Oname:String?="老王"
let Oage:Int?=10
//有效代码在分支内部(print姓名和年龄)
if var name=Oname, let age=Oage {//在赋值中并判断
name="老李"
//进入分支后,name和age一定有值,不需要解包
//name和age的作用域仅在{}中
print(name+String(age))
}else{
print("name 或 age 为 nil")
}
}
}
3.guard let连用语法
guard let与if let正好相反,守护语句一定有值
import UIKit
/// 文档注释
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
demo2()
}
func demo2(){
let Oname:String?="老王"
let Oage:Int?=10
//守护一定有值
guard let name=Oname,let age=Oage else{//在赋值中并判断
print("姓名或者年龄为 nil ")
return
}
//有效代码在分支外部
//执行代码至此,name和age一定有值
print(name+String(age))
}
}
4.非整数int类型作为switch的判断变量
switch可以针对任意类型的值进行分支,不再局限在整数
switch一般不需要break
switch如果要多值,使用逗号“,”
所有的分支至少需要一条指令,如果什么都不干,才使用break
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
demo(num:"10")
}
func demo(num:String){
let num="10","9"
switch num {
case "10":
print("优秀")
default:
print("一般")
}
}
}
打印
优秀
5.for循环的反序遍历
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
demo()
}
func demo(){
for item in 0..<5 {
print(item)
}
print("*****")
for item in (0..<5).reversed() {
print(item)
}
}
}
打印
0
1
2
3
4
4
3
2
1
0
6.字符串长度
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
demo()
}
func demo(){
let str="hello world你好"
//返回指定编码对应的字节数量
print(str.lengthOfBytes(using: .utf8))
//字符串长度
print(str.count)
//使用oc方式
let ocStr=str as NSString;//使用“值 as 类型 方式进行类型转换”
print(ocStr.length)
}
}
打印
17
13
13
7.拼接字符串
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
demo()
}
func demo(){
let str1="hello world"
let str2="你好"
//拼接字符串
let str3="\(str1) \(str2)"
print(str3)
}
}
打印:
hello world 你好
8.格式化字符串
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
demo()
}
func demo(){
let h=8
let m=9
let s=6
let dateStr=String(format: "%02d:%02d:%02d", h,m,s)
print(dateStr)
}
}
打印
08:09:06
9.字符串的子串
建议:一般使用NSString作为中转,因为swift取子串的方法一直在优化
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
demo()
}
func demo(){
let str="我们一起去飞"
//1.nsstring
let ocStr=str as NSString
let s1=ocStr.substring(with: NSMakeRange(2,3))//从零开始计算索引号
print(s1)
}
}
打印
一起去
10.数组
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
demo()
}
func demo(){
let array=[1,3,5,6,7]
print(array)
let point=CGPoint(x:12,y:35)
let array2=[point]
print(array2)
//混合数组,不建议使用
let array3=[point,"zhangsan",1] as [Any]//转换成了any类型
print(array3)
}
}
打印
[1, 3, 5, 6, 7]
[(12.0, 35.0)]
[(12.0, 35.0), “zhangsan”, 1]
11.数组的遍历
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
demo()
}
func demo(){
let array=[1,3,5,6,7]
for item in array{
print(item)
}
print("****")
//按照下标遍历
for idx in 0..<array.count{
print(array[idx])
}
print("****")
//enum block遍历,同时遍历下标和内容
for e in array.enumerated() {//e实际上是元祖
//print(e)
print("\(e.offset) \(e.element)")
}
print("****")
//enum block遍历2,同时遍历下标和内容
for (n,s) in array.enumerated(){
print("\(n) \(s)")//n是索引下标,s就是数组下标n对应的元素,n,s的名字随便写
}
print("****")
//反序遍历
for idx in (0..<array.count).reversed(){
print(array[idx])
}
print("****")
//反序遍历
for content in array.reversed(){
print(content)
}
print("*********")
//反序遍历
for content in array.reversed(){
print(content)
}
print("****f反序索引和内容*****")
for (n,s) in array.enumerated().reversed(){
print("\(n) \(s)")
}
}
}
打印
1
3
5
6
7
1
3
5
6
7
0 1
1 3
2 5
3 6
4 7
0 1
1 3
2 5
3 6
4 7
7
6
5
3
1
7
6
5
3
1
7
6
5
3
1
f反序索引和内容*
4 7
3 6
2 5
1 3
0 1
12.数组的增、删、改
let声明的数组是不可变数组
var声明的数组是可变数组
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
demo()
}
func demo(){
var array=[1,3,5,6,7]
//追加元素
array.append(22)
print(array)
//通过下标定位修改
array[3]=455
print(array)
//删除元素
array.remove(at: 3)
print(array)
array.removeAll(keepingCapacity: true)//删除全部并保留空间
print(array.capacity)//容量每次扩容会*2
}
}
打印
[1, 3, 5, 6, 7, 22]
[1, 3, 5, 455, 7, 22]
[1, 3, 5, 7, 22]
10
13.数组的合并
要合并的两个数组类型必须是一致的
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
demo()
}
func demo(){
var array1=[1,3,5,6,7]
var array2=[33,34,67,9]
array2+=array1
print(array2)
}
}
打印
[33, 34, 67, 9, 1, 3, 5, 6, 7]
14.字典的定义
所有的key都是String类型
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
demo()
}
func demo(){
//定义字典使用[]
let dict=["name":"zhangsan","age":18] as [String : Any]
print(dict)
//定义字典数组
let dicts=[
["name":"zhangsan","age":18] as [String : Any],
["name":"lisi","age":38] as [String : Any],
["name":"wanger","age":33] as [String : Any]
]
print(dicts)
//这种格式使用最多
let dicts2:[[String:Any]]=[
["name":"zhangsan","age":18],
["name":"lisi","age":38] ,
["name":"wanger","age":33]
]
print(dicts2)
}
}
打印
[“name”: “zhangsan”, “age”: 18]
[[“name”: “zhangsan”, “age”: 18], [“name”: “lisi”, “age”: 38], [“age”: 33, “name”: “wanger”]]
[[“name”: “zhangsan”, “age”: 18], [“age”: 38, “name”: “lisi”], [“age”: 33, “name”: “wanger”]]
15.字典的合并
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.demo2()
}
//字典增删改
func demo2(){
var dict:[String:Any]=["name":"张三丰","age":108]
//新增
print("----新增----")
dict["title"]="太极真人"
print(dict)
//修改
print("----修改----")
dict["name"]="马道长"
print(dict)
//删除
print("----删除----")
dict.removeValue(forKey:"age")
print(dict)
print(dict.count)
//遍历
for e in dict{
print("\(e.key):\(e.value)")
}
//另一种形式遍历
print("***")
for (key,value) in dict{//key,value名字可以随便取
print("\(key):\(value)")
}
//字典的合并
var dict1=["name":"张三","age":19,"title":"老板"] as[String:Any]
var dict2=["weight":100,"height":222]
//思路,遍历dict,依次设置
for e in dict2{
dict1[e.key]=e.value
}
print("***合并后的字典***")
for e in dict1{
print("\(e.key):\(e.value)")
}
}
}
打印:
----新增----
[“age”: 108, “title”: “太极真人”, “name”: “张三丰”]
----修改----
[“age”: 108, “title”: “太极真人”, “name”: “马道长”]
----删除----
[“title”: “太极真人”, “name”: “马道长”]
2
title:太极真人
name:马道长
title:太极真人
name:马道长
age:19
name:张三
height:222
weight:100
title:老板
16.TableView的一个实战演练
import UIKit
class ViewController: UIViewController,UITableViewDataSource {//这里遵守DataSource协议
override func viewDidLoad() {
super.viewDidLoad()
setUI()
}
//Mark:-实现UItablview数据源方法
//设置返回的数据行数
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 20
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell=tableView.dequeueReusableCell(withIdentifier: "cellid", for: indexPath)
cell.textLabel?.text="title~~\(indexPath.row)"//这里textlabel是可选的
return cell
}
func setUI(){
//1.创建表格
let tv=UITableView(frame: view.bounds,style: .plain)
//2.添加到视图
view.addSubview(tv)
//3.注册可重用cell
tv.register(UITableViewCell.self, forCellReuseIdentifier: "cellid")
//4.设置数据源(遵守协议)
tv.dataSource=self
}
}
结果
17.collectionView的一个实战演练
import UIKit
class ViewController:UICollectionViewController{//这里遵守DataSource协议
override func viewDidLoad() {
super.viewDidLoad()
}
//数据源方法
//如果使用collectionViewController数据源方法都有一个override
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 50
}
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell=collectionView.dequeueReusableCell(withReuseIdentifier: "cellid", for: indexPath)
cell.backgroundColor=UIColor.blue
return cell
}
//移动cell
override func collectionView(_ collectionView: UICollectionView, moveItemAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {
}
}
效果