美文网首页门外汉自学Swift
20170610基础知识-面向对象

20170610基础知识-面向对象

作者: 花间提壶蛋大厨 | 来源:发表于2017-06-13 09:22 被阅读0次

    Object Oriented ProgrammingOOP:面向对象,使用对象、类、继承、封装、属性、方法、扩展、协议等

    1、基本特性:封装、继承、多态

    封装:尽可能隐蔽对象内容细节,对外行程一个边界,只保留有限的对外接口

    继承:特殊类具有一般类的全部属性和方法,一般类(父类、基类),特殊类(子类、派生类)

    多态:父类中定义的属性、方法,在被子类继承后,可以使同一个属性、方法,在父类、子类中,具有不同的含义

    2、类、结构体、枚举,都是面向对象的数据类型

    3、枚举

    enum 枚举名 { 枚举的定义(一组成员的值和一组相关值) }

    Swift中,枚举的成员值默认不是整数类型,成员值前面要加上case

    使用枚举成员赋值时,枚举类型名.成员值

    在switch中使用枚举,case必须全面包含枚举中的所有成员

    枚举原始值

    enum 枚举名:数据类型(字符、字符串、整数、浮点数)

    {  case 成员名 = 默认值  }

    将枚举的成员值转换为原始值:枚举名.成员名.rawValue

    将枚举的原始值转换为成员值:枚举名(rawValue: 原始值)

    枚举相关值

    enum Figure {

    case Rectangle(Int, Int)

    case Circle(Int)

    }

    对于Figure,Rectangle和Circle是相关值,都是元组类型,对于一个特定的Figure实例,只能有一个相关值

    为了从相关值中提取数据,可以在元组字段前面加let或var,如果元组中字段类型一致并且需要全部提取,可以将let或var移到相关值前面

    .Rectangle(let width, let height)     let .Rectangle(width, height)

    4、结构体、类

    Swift中的结构体,不近可以定义成员变量,还可以定义方法,是一种轻量级的类,结构体不具有继承性,不能强制类型转换、使用析构函数、使用引用计等

    class 类名 { 定义类的成员 }

    struct 结构体名 { 定义结构体的成员 }

    classEmployee {

    varno:Int=0

    varname:String=""

    varjob:String?

    varsalary:Double=0

    vardept :Department?  将结构体和类关联起来

    }

    structDepartment {

    varno:Int=0

    varname:String=""

    }

    实例化: let emp = Employee()  var dept = Department(),实例化后,会开辟内存空间

    类一般声明为let,类是引用数据类型,let说明不能修改引用,但引用指向的对象可以修改

    5、引用类型的比较 ===  !===,比较两个引用是否为同一个实例,结构体和枚举都是值类型,但不能用==  !=,必须重载===  !==运算符,定义相等规则

    6、运算符重载

    定义一个重载运算符的函数,在需要执行被重载的运算符时调用该函数

    func==(lhs:Department, rhs:Department) ->Bool{

    returnlhs.name==rhs.name&&lhs.no==rhs.no

    }

    func!=(lhs:Department, rhs:Department) ->Bool{

    if(lhs.name !=rhs.name||lhs.no!=rhs.no) {

    returntrue

    }

    returnfalse

    }

    7、类型嵌套,类、结构体、枚举可以进行嵌套,在某一个类型的{}内部定义类

    8、可选链:显示拆包(?-!)替换为(?-?),就是可选链,遇到nil不会抛出错误,会把nil返回给引用者

    9、访问限定

    访问范围主要有两个:模块、源文件

    模块:指一个应用程序或者一个框架,用import关键字引入

    源文件:.swift文件,编译之后被包含在应用程序包或框架中,一个源文件包含一个面向对象类型(类、结构体、枚举),这些类型中又包含函数、属性等

    访问级别:open、public、internal、fileprivate、private

    open:无论在自己模块内部,还是在其他模块(import语句引入其他模块)都可以被访问

    public:在同一个模块中,与open完全一样,在不同模块时,public所声明的类不能被继承,public所声明的属性和方法不能被重写

    internal:默认访问限定,只能在自己模块中被访问

    fileprivate:只能在当前源文件中被访问

    private:只能在类型内部被访问

    10、访问级别使用原则

    ①如果一个类型定义为internal、private,那么类型声明的变量或常量不能使用public

    ②函数的访问级别,不能高于它的参数和返回类型的访问级别

    ③元素类型访问级别,遵循字段最低级的访问级别

    ④枚举中成员的访问级别继承于该枚举

    11、类和结构体的异同

    相同:定义存储属性、定义方法、定义下标、定义构造函数、定义扩展、实现协议

    不同:只有类才能继承、核对运行时对象的类型、析构对象释放资源、引用计数允许一个实例有多个引用

    结构体是值类型,每一个实例没有独一无二的标识

    类是引用类型,每一个实例都有独一无二的标识

    相关文章

      网友评论

        本文标题:20170610基础知识-面向对象

        本文链接:https://www.haomeiwen.com/subject/wqxdqxtx.html