swift入门到精通视频教程(微博项目)01day1--for,拼接字符串,数组,字典,实战tablevie,实战collectionview

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) {
    
  }
}

效果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值