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 ...
随机推荐
- MVC 5学习总结笔记1
01.使用MVC自带的DataAnnotations实现数据验证 public class ExternalLoginConfirmationViewModel { [Required] [Displ ...
- js实现的文章输入检查与测速。(纯js版本)
朋友又提出一些需求.希望不要jquery .于是修改成js版本. <!DOCTYPE html> <html> <head> <meta charset=&q ...
- word2010中,插入-符号-公式显示是灰色的解决办法
在文件选项里点转换,把文档转换成最新格式,也就是2010,因为兼容旧版本模式(比方03,07)的文档是无法使用公式编辑器功能的 步骤: 1.点击“文件” 2.出现下图: 3.点击“转换”图标,将生成最 ...
- easyui 翻译
1,DataGrid checkOnSelect: 设置成true:用户点击一行的时候,复选框被选中或者是取消选中 设置成false:只有当用户点击复选框的时候,复选框才能被选中或者是取消选中 sel ...
- java基础面试
1. String类为什么是final的. 安全性:如果字符串是可变的,那么会引起很严重的安全问题.譬如,数据库的用户名.密码都是以字符串的形式传入来获得数据库的连接,或者在socket编程中,主机名 ...
- iOS 导航栏不可点击
self.navigationController.navigationBar.userInteractionEnabled = NO;
- Leetcode 197. Rising Temperature
Given a Weather table, write a SQL query to find all dates' Ids with higher temperature compared to ...
- centos 安装mysql 5.5.12
1.安装gcc-c++ gcc make cmake编译器 2.安装ncurses 3.添加用户组 groupadd mysql useradd -r -g mysql mysql 4.安装 tar ...
- js原生设计模式——3简单工厂模式\js面向对象编程实例
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- gcd-函数
在网上看到了这个函数 int gcd(int a,int b){if(a==0) return b; if(b==0) return a; return gcd(b,a%b);} 是求最大公约数的 有 ...