Swift之学习元组、闭包(block)、结构体

元组:tuple
Swift元组和oc的数组和字典很相像,但又有很大差别;
1、元组可以放不同数据类型的元素
2、元组的取值方式:
《1》 可以使用下标取值0

《2》 通过key取值 (必须定义)
公式:1、(1,"mm",对象)
2、("key":值,"key":值)
取值的时候用 . 取值
另外,Swift和oc的不同
swift:
数组 字典:[]
元组:()
oc:
数组:[]
字典:{}
例子:

 let tuple1 = (1,"mm")
        print(tuple1.0)
        
        let tuple2 = (age:25,name:"小明")
        print(tuple2.age)
        
        let person = (height:175,age:22,sex:"男",name:"小刚",weight:130)
        print(person.name)

闭包:封闭的代码块 也可以把函数 当成一个闭包
一:基本使用公式
1、完整公式
let 闭包名 = {(参数列表) -> 返回值类型 in
具体执行的代码
如果有返回值 return 返回值

    }

例:使用闭包 计算三个数的和

let sum = {(a:Int,b:Int,c:Int)-> Int in
        
            return a+b+c
        }
       print(sum(1,2,2))

2------无返回值 不带参
完整版:{()->Void in 实现代码}
简化版:{}

let block = {
            print(".....")
        }
        block()

3------有参数 无返回值 简化版
{(参数列表) in 实现代码}

let block = {(age:Int) in
        
            print("ggggggg")
        }
        block(22)

4、调用:闭包名()
如:block()
二:当做参数使用公式
1、声明包含闭包的方法
func 方法名(闭包名:(参数列表)->返回值类型){闭包名(实参列表)}
2、调用包含闭包的方法
方法名{(参数列表) in 实现代码}
--****-----使用block当做参数的使用顺序:执行顺序有点迷糊,需要好好理解
要从两个方面理解它:书写顺序和调用顺序

Swift之学习元组、闭包(block)、结构体_第1张图片
block调用.jpg
//        3、block实现 方法调用的部分 :书写的顺序
//        1)、调用方法:调用顺序
        loadData{(message) in
//        3)回来调用block实现部分:调用顺序
            print(message)
        }

//   1、在方法中 填写 把block声明部分 当做参数:书写顺序
    func loadData(response:(message:NSString)->Void){
//        2)、进入方法体 调用block:调用顺序
//        _省略变量
//     2、 block调用:书写顺序
        response(message:"下载完毕")
    }

三:typealias 替代
typealias 要替代成的名字 = 要替代的数据类型
如:type alias Height = Float
先设置一个typealias

typealias Block = ()->Void

声明
func mmmm(message:Block){
print("666666")
}
实现
mmmm{

    }

------结构体---------
增加方法 (可以调用方法 也可以添加方法)
增加实例化方法 (init)

调用:
使用实例化方法 创建结构体对象
1、改变
《1》自动生成实例化方法
《2》可以在结构体中 创建方法
《3》可以在结构体中 调用方法
2、公式
声明:
struct 结构体名{
let(var) 变量?
func(){}
}
如果改变结构体中的 值 需要在方法前面加上mutabing

使用:
let(var) 变量名 = 结构体名.init()
let(var) 变量名 = 结构体名.init(实参)

3、与类的区别
(1)结构体偏向 处理数据
(2)类 偏向于 处理逻辑、关系
(3)类中的对象 有对象的特征:封装、继承、多态
(4)引用计数的处理不同 结构体有专门处理变量的引用计数方法

struct Hero {
    var name:NSString?
    var blood:Int?
    var lv:Int?
    mutating func upBlood(){
        blood!+=100
        add()
    }
    
}
func add(){
    print("+++")
}
struct Monster {
    var name:NSString?
    var blood:Int?
    
   mutating func des(){
        print(name,blood)
    }
    func bbb(){
        print("")
    }
创建 结构体对象
let wa = Monster.init(name:"kkkk",blood:200)
       print(wa.name,wa.blood)

......................

你可能感兴趣的:(Swift之学习元组、闭包(block)、结构体)