闭包
     类似于 OC 中的 Block,是一段预先定义好的代码,在需要时执行
 
闭包表达式格式:
 { (形参名称1: 形参类型1, 形参名称2: 形参类型2, ...) -> 返回值 `in`
          //要执行的代码
  }
in 用于区分闭包定义和代码实现
 
  //定义有参数a的闭包
    let coluse = { (a:String)->Void in
        print("xxxxx\(a)")
    }
   
    //定义无参数的闭包
    let coluse1 = {
       
    }
    let coluse2 = {()->Void in
       
    }
 
 // 尾随闭包
        // 当闭包是最后一个参数的时候, 将闭包放在参数整个()外面
        UIView.animateWithDuration(0, animations: { () -> Void in
            print("aa")
        })
 

闭包使用场景(回调)
  //1.定义闭包
        let cal = {(result:String)->Void in
            print("闭包的参数是\(result)")
        }
        //调用方法
        loadDate(cal)
 
    }

//2.创建方法,闭包callback:(String)->Void作为方法的参数
    func loadDate(callback:(String)->Void) ->Void{
        //异步
        dispatch_async(dispatch_get_global_queue(0, 0)) { () -> Void in
            //睡2秒
            NSThread.sleepForTimeInterval(2)
            //回到主线程
            dispatch_async(dispatch_get_main_queue(), { () -> Void in
                //设置回调的参数
                let callString = "什么鬼"
                //3.调用回调
                callback(callString)
            })
        }

    }
 

定义类
  • ( )里面是空,表示调用类的默认构造函数 = [[类名 alloc] init];
  • 实例化一个类:
      var 变量名 = 类名()
class 类名: 父类名 {
      //: 一些属性
      //: 一些方法
  }
 
注意:
  1.Swift的继承和OC一样是通过:, Swift也只有单继承
 2.访问类的属性和调用类的方法都是通过.来进行的
  3.覆盖父类方法, 需要加关键字 override
 
类的属性
    • OC 中的属性:
      • @property(noatomic, copy) NSString *name;

        • 1.在.h声明 getter 和 setter 方法
        • 2.在.m实现 getter 和 setter 方法
        • 3.在.m生成 _成员变量
    • Swift 中属性分为:存储型属性计算型属性

      • 存储型属性: 存储数据
      • 属性监视器: 当存储型属性发生改变的时候,通知我们属性发生了改变,可用于监视值的改变

        • willSet: 在属性将要发生改变时调用
        • didSet: 在属性已经发生改变时调用(常用)
 
计算型属性: 不存储任何数据,只生成 gettersetter,当只提供 get 方法时,称之为只读计算属性.必须要有 get 方法
      • 计算型属性 相当于 OC 中的 @property 生成的 gettersetter 方法,只不过 setter 方法没有给 _成员变量 赋值
    // 存储型属性: 专门负责存储数据的
    /*
        存储型属性有属性监视器:监视值的改变
            1.willSet: 值在改变前调用,了解,一般用不到
            2.didSet: 值改变后调用, 这个用的多,如刷新列表数据
    */newValue表示之前的值
    var name: String = "liudehua" {
        willSet {
            print("值改变前: \(newValue)")
        }
       
        didSet {
            print("值改变后: \(name)")
        }
    }
   
    // 计算型属性: 提供get和set方法,里面写什么代码根据业务需求来
    // 当计算性属性,只提供get方法时,成为只读计算性属性,不能只有set没有get
    var nikeName: String {
        get {
            return "hehe"
        }
        set {
            // newValue就是外面设置的值
            print("别人设置了 nikeName 属性,值为 \(newValue)")
        }
    }
    

构造函数
作用:在对象实例化过程中给所有的存储型属性设置初始值,并且执行必要的准备和初始化任务.
便利构造函数
    • 便利构造函数: 它是辅助性的构造函数.方便创建对象
    • 默认情况下,所有的构造函数都是指定构造函数 Designated
    • convenience 关键字修饰的构造方法就是便利构造函数
    • 便利构造函数可以返回 nil
    • 需要调用本类的一个指定构造函数
 
构造函数小结
    • 1.不需要func关键字.名称是固定的,都叫 init
    • 2.如果子类没有实现构造函数.会继承父类的构造函数
    • 3.子类构造函数需要调用父类构造函数
    • 4.需要先初始化子类属性,在调用父类构造函数
    • 5.子类一旦实现了构造函数.就不会继承父类的构造函数
 
 // 构造函数给属性赋值
    // 构造函数,先给自己的属性赋值,在调用父类的构造函数
    override init() {
        self.name = "liudehua"
        super.init()
    }
   
    // 重载: 函数名称一样,但是参数不一样
    init(name: String) {
      // 先给自己的属性赋值
        self.name = name
        super.init()
    }
//子类与父类不能有相同名字的属性,但是不是继承关系的两个类可以有相同名字的属性和方法
    //便利构造函数
    convenience init?(stu_name:String,stu_grade:Float){
        if stu_grade < 0 || stu_grade > 100{
            print("非人类分数")
            return nil
        }
        //需要调用自身的指定构造函数或便利构造函数,不能调用父类的
        self.init(name:stu_name,grade:stu_grade)
    }
   
   
    convenience init?(s_name:String,s_grade:Float){
        //调用自身的便利构造函数
        self.init(stu_name:s_name,stu_grade:s_grade)
    }
 

懒加载
      // 懒加载方式1
    lazy var person: Person = Person(name: "小强", age: 20)
    lazy var arr: NSArray = NSArray()
    // 懒加载方式2(完整写法)
    lazy var person2: Person = { () -> Person in
        let p = Person(name: "强强", age: 22)
       
        return p
    }()
   
    //(默认写法)除了创建对象,还可以做一些初始化操作
    lazy var person2: Person = {
        let p = Person(name: "强强", age: 22)
        // 此处来1000行代码
        let p1 = NSArray()
        return p
    }()

 待续。。。
 
 
 

swift小结02-基础篇的更多相关文章

  1. iOS开发swift语法0基础篇—————(swift技术交流群:361513739)

    iOS开发之swift语法0基础篇:点击打开链接  swift技术交流QQ群361513739

  2. swift小结01--基础篇

    2014年推出的swift目前已来到了3.0,日趋稳定,这个是之前学习整理的关于swift的资料,分享给大家,希望有用,写的不足的地方还请见谅. 语言背景:         Swift 语言由苹果公司 ...

  3. Swift 学习- 02 -- 基础部分2

    class NamedShape{ var numberOfSides: Int = 0 var name: String init(name: String) { self.name = name ...

  4. Java多线程系列--“基础篇”02之 常用的实现多线程的两种方式

    概要 本章,我们学习“常用的实现多线程的2种方式”:Thread 和 Runnable.之所以说是常用的,是因为通过还可以通过java.util.concurrent包中的线程池来实现多线程.关于线程 ...

  5. 前端开发工程师 - 02.JavaScript程序设计 - 第1章.基础篇

    第1章--基础篇 JS介绍 html 网页的内容:css 网页的样式:javascript 网页的行为 i.e. hello world <!DOCTYPE html> <html& ...

  6. WebBug靶场基础篇 — 02

    本篇以第一人称记录这个关卡的第 1-5 关. 由于我记录的过程有点偏向于思考,所以截图截的多 = =!所以文章有点长... 下午一觉醒来,已经 4 点多了,然后开电脑,在虚拟机里,铺了铺靶场,但是毕竟 ...

  7. 【matlab 基础篇 02】基础知识一键扫盲,看完即可无障碍编程(超详细+图文并茂)

    博主快速入门matlab,系统地整理一遍,如何你和我一样是一个新手,那么此文很适合你: 本人能力有限,文中难免有错误和纰漏之处,请大佬们不吝赐教 创作不易,如果本文帮到了您: 请帮忙点个赞

  8. 【转】Shell编程基础篇-上

    [转]Shell编程基础篇-上 1.1 前言 1.1.1 为什么学Shell Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, Linux/UNIX系统的底层及基础应 ...

  9. 我叫Mongo,收了「查询基础篇」,值得你拥有

    这是mongo第二篇「查询基础篇」,后续会连续更新6篇 mongodb的文章总结上会有一系列的文章,顺序是先学会怎么用,在学会怎么用好,戒急戒躁,循序渐进,跟着我一起来探索交流. 通过上一篇基础篇的介 ...

随机推荐

  1. 【python】python的列表表达式或解析式,帅就一个字

    >>> list1 = [x**2 for x in range(10)]>>> list1[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

  2. linux vi 使用

    vi 有一般模式和编辑模式 如vi test.txt 是首先进入的一般模式,一般模式下只能进行复制.删除.粘贴文件数据, 在一般模式下按i .I.a.A.o.O 都能进入编辑模式,按下不同的键进入编辑 ...

  3. qt 5 小练习 简易画板

    如何在窗口上画线?用一根根线来拼凑图案呢? 想必大家都知道点的集合是线,而线的集合就是很多线啦,用线的集合我们能拼凑出许许多多的图案.于是我就要记录自己跟着老师的学习之路啦: 既然有集合的话,势必要用 ...

  4. Js Carousel

    http://getbootstrap.com/javascript/#carousel http://owlgraphic.com/owlcarousel/#demo https://www.mob ...

  5. C++引用作为函数的参数

    引用也可以作为一个函数的参数,如:我们定义交换两个数的函数swap,将函数的参数定义成引用的形式: void swap(int &p1, int &p2) //此处函数的形参都是引用 ...

  6. Web应用的组件化(一)

    基本思路 1. 为什么要做组件化? 无论前端也好,后端也好,都是整个软件体系的一部分.软件产品也是产品,它的研发过程也必然是有其目的.绝大多数软件产品是追逐利润的,在产品目标确定的情况下,成本有两个途 ...

  7. cisco telnet会话SESSION管理及相关Dynagen配置文件

    #Lab 2-5 autostart = False [localhost] [[2621]] ram = 64 image = C:\Program Files (x86)\Dynamips\ima ...

  8. 编译GNU/Linux共享库, 为什么要用PIC编译?

    http://blog.csdn.net/chenji001/article/details/5691690

  9. ANDROID_MARS学习笔记_S02_015_Gson解析json串为对象集合

    package com.example.s02_e12_json3; import java.lang.reflect.Type; import java.util.Iterator; import ...

  10. perl unload utf-8 oracle 数据库

    perl unload utf-8 Oracle [oracle@oadb sbin]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Produc ...