20170610基础知识-面向对象

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、类和结构体的异同

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

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容