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当做参数的使用顺序:执行顺序有点迷糊,需要好好理解
要从两个方面理解它:书写顺序和调用顺序

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)

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,671评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,442评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,524评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,623评论 1 275
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,642评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,584评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,953评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,621评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,865评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,608评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,698评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,378评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,958评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,940评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,173评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,419评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,425评论 2 342

推荐阅读更多精彩内容