Swift 面向对象解析(二)
接着上面一篇说的内容:
一 继承:
苹果继承与水果,苹果是水果的子类,则苹果是一种特殊的水果;这就是继承的关系,这个我们学OC的时候相信也都理解了,就不再描述定义了,下面的就叫继承:
class ZXMessageCell: UITableViewCell { // 自定义的cell继承与UITableviewCell }
继承了父类,你也就能使用父类的属性方法,这些我们学OC的时候也都清楚。看下面几点,
1:重写父类的方法
2:重写父类的属性
3:重写属性观察者 上面的 1 2 3 只要记住一点,在重写的方法,属性,观察者等等前面添加 override 就可以 具体的例子 Swift继承
4:防止重写 final 关键字可以用于修饰 类、属性、方法、下标。使用 final 修饰的类不能被继承,派生子类,使用 final 修饰的属性不能被重写,使用 final 修饰的方法、下标不能被重写。
二:类的构造与析构
由于类的继承,子类不仅包括了自己定义的存储属性,还包括从父类继承得到的存储属性,类的所有存储属性,包括所有的继承父类的属性,在构造的过程中必须设置初始值,因此类的构造过程相对的比较复杂。
与构造器相反的是,Swift 允许为类(枚举,结构体不允许)定义析构器,在实例销毁之前,系统就会自动的调用该实例的析构器。
说实话,就单单这一部分的内容,要说清楚里面的原理,可能得写一本书啦。。当然这书也肯定不是我写,没那能力,毕竟菜。哈哈~
下面给大家的学习链接,希望给大家有帮助:
三:多态
Swift引用变量有两个类型,一个是编译时类型,一个是运行时类型。编译时类型由声明该变量时使用的类型决定,编译器只认每个变量的编译时的类型;运行时类型由实际赋给该变量的实例决定,如果编译时的类型和运行时的类型不一致,就可能出现所谓的多态(Polymorphism)
上面是多态的概念,它的使用和例子我以前总结写过,把以前博客的链接给大家。
四:嵌套
这个就一句话带过了,在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 的协议的作用类似于 OC中的协议,其实OC的协议你理解的话,这里也就没多少需要在强加去解释的。协议的基本的用法我以前的博客当中也有说过 Swift 2.2 协议和代理
顺便指出,可选协议这一点,其实也挺简单的,你在这些属性、方法、下标等想让它是可选的,让它加上 optional 这个关键字就行了。可选的,看字面意思大家也可想而知了,并不一定是遵守了这个协议之后必须要实现的方法和属性就叫可选的。
七:封装
封装是面向对象的额三大特性之一,两外两个是继承和多态。它指的是将实例的状态信息,实现细节隐藏在实例内部,不允许外部程序直接访问实例的内部信息,只能通过该类型所提供的公开的方法来访问和操作实例的内部信息。
Swift 面向对象解析(二)的更多相关文章
- Swift 面向对象解析(一)
面向对象总体概括: Swift 不仅能够面向过程编程,也能够面向对象编程(OOP).面向对象其实就是“以对象为核心”,把我们的客观世界想着是由一个个对象组成的,面向对象编程则为对象提供了属性和方法,属 ...
- Python 基础 面向对象之二 三大特性
Python 基础 面向对象之二 三大特性 上一篇主要介绍了Python中,面向对象的类和对象的定义及实例的简单应用,本篇继续接着上篇来谈,在这一篇中我们重点要谈及的内容有:Python 类的成员.成 ...
- C#使用zxing,zbar,thoughtworkQRcode解析二维码,附源代码
最近做项目需要解析二维码图片,找了一大圈,发现没有人去整理下开源的几个库案例,花了点时间 做了zxing,zbar和thoughtworkqrcode解析二维码案例,希望大家有帮助. zxing是谷歌 ...
- Java生成与解析二维码
1.下载支持二维码的jar包qrcode.jar和qrcode_swetake.jar, 其中qrcode_swetake.jar用于生成二维码,rcode.jar用于解析二维码,jar包下载地址(免 ...
- java 生成和解析二维码
public class QRCode { /** * 解析二维码(QRCode) * @param imgPath * @return */ public static String decoder ...
- java代码生成二维码以及解析二维码
package com.test; import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedI ...
- iOS开发Swift篇—(二)变量和常量
iOS开发Swift篇—(二)变量和常量 一.语言的性能 (1)根据WWDC的展示 在进行复杂对象排序时Objective-C的性能是Python的2.8倍,Swift的性能是Python的3.9倍 ...
- asp.net C#生成和解析二维码代码
类库文件我们在文件最后面下载 [ThoughtWorks.QRCode.dll 就是类库] 使用时需要增加: using ThoughtWorks.QRCode.Codec;using Thought ...
- Fixflow引擎解析(二)(模型) - BPMN2.0读写
Fixflow引擎解析(四)(模型) - 通过EMF扩展BPMN2.0元素 Fixflow引擎解析(三)(模型) - 创建EMF模型来读写XML文件 Fixflow引擎解析(二)(模型) - BPMN ...
随机推荐
- 6、手把手教你Extjs5(六)继承自定义一个控件
Extjs的开发都可以遵循OOP的原则,其对类的封装也很完善了.自定义一个控件最简单的办法就是继承一个已有的控件.根据上一节的需要,我做了一个Button的子类.首先根据目录结构,在app目录下建立一 ...
- sharedPreferences存储数据
sharedPreferences使用的是键值对的方式存储数据. 1.Android中三种获取sharedPreferences的方式 1)Context 类中的getSharedPreference ...
- memcached命令和配置
转自:http://www.tuicool.com/articles/VJzAvuB 安装配置 首先,编译.安装.配置libevent库,执行如下命令: wget https://github.com ...
- 如何使用UDP进行跨网段广播(转)
源:如何使用UDP进行跨网段广播 广播域首先我们来了解一下广播域的概念.广播域是网络中能接收任一台主机发出的广播帧的所有主机集合.也就是说,如果广播域内的其中一台主机发出一个广播帧,同一广播域内所有的 ...
- LPC1788做U盘的时候对命令的响应
首先是对于端点的数据处理 #ifndef __USBEP2_H_ #define __USBEP2_H_ #include "usb.h" #include "usbhw ...
- .NET反射
反射是一个程序集发现及运行的过程,通过反射可以得到*.exe或*.dll等程序集内部的信息.使用反射可以看到一个程序集内部的接口.类.方法.字段.属性.特性等等信息.在System.Reflectio ...
- Hibernate 中对象关系映射(ObjectRelationMapping)
1.什么是对象关系映射? 解析:对象-关系映射(Object Relational Mapping,简称ORM,对象关系映射)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说, ...
- ajax 注册
$(document).ready(function(e){ $("#uid").blur(function(){ var uid = $("#uid").va ...
- BZOJ2064: 分裂
2064: 分裂 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 360 Solved: 220[Submit][Status][Discuss] De ...
- Struts2配置dtd约束
Struts2和Struts1的区别: 一.elclipse-ee开发 搭建环境eclipse-ee 1.加入jar包 apps/struts2-blank.war解压 2.在web.xml文件中配 ...