Swift 面向对象解析(二)

时间:2021-02-09 14:28:06

接着上面一篇说的内容:

一 继承:

苹果继承与水果,苹果是水果的子类,则苹果是一种特殊的水果;这就是继承的关系,这个我们学OC的时候相信也都理解了,就不再描述定义了,下面的就叫继承:

class ZXMessageCell: UITableViewCell {    

    // 自定义的cell继承与UITableviewCell 

}

继承了父类,你也就能使用父类的属性方法,这些我们学OC的时候也都清楚。看下面几点,

1:重写父类的方法

2:重写父类的属性

3:重写属性观察者    上面的 1 2 3 只要记住一点,在重写的方法,属性,观察者等等前面添加 override 就可以   具体的例子 Swift继承

4:防止重写  final 关键字可以用于修饰 类、属性、方法、下标。使用 final 修饰的类不能被继承,派生子类,使用 final 修饰的属性不能被重写,使用 final 修饰的方法、下标不能被重写。

二:类的构造与析构

由于类的继承,子类不仅包括了自己定义的存储属性,还包括从父类继承得到的存储属性,类的所有存储属性,包括所有的继承父类的属性,在构造的过程中必须设置初始值,因此类的构造过程相对的比较复杂。

与构造器相反的是,Swift 允许为类(枚举,结构体不允许)定义析构器,在实例销毁之前,系统就会自动的调用该实例的析构器。

说实话,就单单这一部分的内容,要说清楚里面的原理,可能得写一本书啦。。当然这书也肯定不是我写,没那能力,毕竟菜。哈哈~

下面给大家的学习链接,希望给大家有帮助:

Swift的构造和析构过程

Swift 构造过程+析构过程(十三)

Swift的构造过程

三:多态

Swift引用变量有两个类型,一个是编译时类型,一个是运行时类型。编译时类型由声明该变量时使用的类型决定,编译器只认每个变量的编译时的类型;运行时类型由实际赋给该变量的实例决定,如果编译时的类型和运行时的类型不一致,就可能出现所谓的多态(Polymorphism)

上面是多态的概念,它的使用和例子我以前总结写过,把以前博客的链接给大家。

Swift 2.2 多态和强制转换

四:嵌套

这个就一句话带过了,在Swift中允许在一个类型的内部去嵌套定义另一个类型。

五:扩展

这是个重点,扩展就像我们OC中用的类别或者说分类一样,都是同一个东西,但Swift的扩展功能要去强大的多。先把扩展提供的功能列举出来;

1:添加类型存储属性

2:添加实例计算属性和类型计算属性

3:添加实例方法和类型方法

4:添加新的构造器,而且新添加的构造器不影响原来的构造器

5:添加下标

6:定义和使用新的嵌套类型

7:是一个已有类型遵守一个或者多个协议

顺便提一下拓展的创建方法,其实挺简单的,就是新建一个.Swift文件就OK了,还有以前我们在OC中使用的PCH文件,也是可以用这个.Swift文件代替了的。你在这个.Swift文件当中定义了的常量和OC中PCH头文件的功能是完全一样的。

看下面的代码例子,下面是给UIView扩展了两个方法:

// MARK: - UIView的扩展方法
extension UIView{ func containsSubView(subView:UIView) -> Bool { for view in self.subviews { if view .isEqual(subView) { return true
}
}
return false
} func containsSubViewOfClassType(aClass:AnyClass) -> Bool { for view in self.subviews { if view .isMemberOfClass(aClass) { return true
}
}
return false
}

下面是给大家的学习链接,都写的很不错,都有作者的大把心血在里面的,致敬!

Swift学习笔记(十一)--拓展和协议

Swift协议和扩展

六  协议:

Swift 的协议的作用类似于 OC中的协议,其实OC的协议你理解的话,这里也就没多少需要在强加去解释的。协议的基本的用法我以前的博客当中也有说过  Swift 2.2 协议和代理

顺便指出,可选协议这一点,其实也挺简单的,你在这些属性、方法、下标等想让它是可选的,让它加上 optional 这个关键字就行了。可选的,看字面意思大家也可想而知了,并不一定是遵守了这个协议之后必须要实现的方法和属性就叫可选的。

七:封装

封装是面向对象的额三大特性之一,两外两个是继承和多态。它指的是将实例的状态信息,实现细节隐藏在实例内部,不允许外部程序直接访问实例的内部信息,只能通过该类型所提供的公开的方法来访问和操作实例的内部信息。