闭包
     类似于 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. 由css属性:vertial-align想到的。。

    我的笔记本:型号 acer4750G-2412g50mnkk 分辨率:1333*768,点距:0.25933mm; 12px下的font-size: 默认line-height减去font-size: ...

  2. .Net Framework Data Provider可能没有安装

    方法一.下载SQL Server Compact 4.0 安装后就可以解决.下载地址是: http://www.microsoft.com/downloads/zh-cn/details.aspx?f ...

  3. AppDelegate解析

    当我们创建一个iOS项目,默认会有main.m类,这是一个程序的主入口.main.m方法体如下: #import <UIKit/UIKit.h> #import "AppDele ...

  4. 在mac系统安装Apache Tomcat的详细步骤

    对于Apache Tomcat 估计很多童鞋都会,那么今天就简单说下在mac上进行tomcat的安装:    第一步:下载Tomcat       这里Himi下载的tomcat version:7. ...

  5. 关于Java(JDBC连接数据库)

    Processing SQL Statements with JDBC 处理JDBC中的SQL语句 这节主要是 JDBC 与数据库交互的基本步骤 JDBC的基石是DriverManager,通过它,J ...

  6. 50个实用的jQuery代码段让你成为更好的Web前端工程师

    本文会给你们展示50个jquery代码片段,这些代码能够给你的javascript项目提供帮助.其中的一些代码段是从jQuery1.4.2才开始支持的做法,另一些则是真正有用的函数或方法,他们能够帮助 ...

  7. Python的startswith和endswith

    做文本处理的时候经常要判断一个文本有没有以一个子串开始,或者结束.Python为此提供了两个函数: S.startswith(prefix[, start[, end]]) -> bool 如果 ...

  8. C#函数的方法定义和方法调用小议

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...

  9. bzoj 2852: 强大的区间 辗转相除

    2852: 强大的区间 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 45  Solved: 12[Submit][Status][Discuss] D ...

  10. 【UVA 10369】 Arctic Network (最小生成树)

    [题意] 南极有n个科研站, 要把这些站用卫星或者无线电连接起来,使得任意两个都能直接或者间接相连.任意两个都有安装卫星设备的,都可以直接通过卫星通信,不管它们距离有多远. 而安装有无线电设备的两个站 ...