一、什么是面向对象
在讲对象的同时需要了解一下类的概念,说简单点,类就是把所有关于这对象的归类,比如人类,水果,汽车等,人类中有男人,有女人,还有.....呵呵,开玩笑。水果中有香蕉,苹果,菠萝,西瓜等等,那什么是对象呢,比乔布斯,就是人类中的一员,他就是一个对象,一个类的实例。
二、面向对象编程的特性
不管是java,c++,还是IOS编程(这些是我所接触到的,没接触的不好讲也不能讲),面向对象编程都会有一下三个特征:
1、封装:就是将对象的状态数据,对象的实现细节封装起来,然后暴露一些方法,这些方法可以通过外部对象调用来改变对象的状态,常见的封装有以下个private(个人的,私密的,就相当于个人隐私,是不能给别人看,更不能给别人用的),public(公共的)还有internal
2、继承:举个例子:我是人类中的一员,人类的一些属性我也会有,比如年龄,性别等,但是同时我是属于男人,男人也是一个类,男人同时也是人类,所以男人这个类可以获取人类中的一些属性,这个获取的方法就是继承,男人这个类继承了人类,swift提供了单继承,但是它通过协议来弥补了单继承的不足。
3、多态:多态就是对面向对象的灵活应用,后面介绍
三、swift面向对象编程
swift为对象、枚举,结构体、协议、扩展提供了面向对象支持
1、枚举
(1)创建:
enum 枚举名
{
枚举成员
}
如:性别
enum sex
{
// 这是一种方式
case male,famale
/这是另一种方式
case male
case famale
}
(2)枚举的使用(申明变量):
第一种未给它类型:需要添加枚举名,当然如果给了它类型也可以添加枚举名
var person = sex.male
第二种给了它类型:此时可以省略枚举名,强调一下,可以不省略枚举名
var person:sex
person = .maleif()
示例:
import Foundation
enum sex
{
case male,famale
}
var person = sex.male
if person == .male
{
println("我是男生")
}
输出:我是男生
(3)枚举原始值:
enum 枚举名:原始类型
{
case 枚举值 = 原始值
}
获取原始值:rawValue
示例:
import Foundation
enum sex:String
{
case male = "男生",famale = "女生"
}
var person = sex.male
if person == .male
{
println("我是\(person.rawValue)")
}
输出:我是男生
(4)获取关联值
创建关键值:
enum personPage
{
case person(name:String,age:Int)
case person()name:String,age:Int,sex:String)
}
示例:
enum personPage
{
case person(name:String,age:Int)
case person1(name:String,age:Int,sex:String)
}
var personex1 = personPage.person1(name="王迪",age=22,sex="女")
switch(personex1)
{
case personPage.person1(var name,var age,var sex):
println("my name is \(name),my age is \(age),my sex is \(sex)")
}
输出:my name is 王迪,my age is 22,my sex is 女
2、结构体和类
(1)创建:
public class Person
{
var name:String =""
var age:Int =0
func sayHi(content:String)
{
println(content)
}
}
//第一种方式 创建实例
var p:Person
p = Person()
p.sayHi("hello王迪")
//第二种方式 创建实例
var pp = Person()
pp.sayHi("hello world")
输出:hello 王迪
hello world
(2)self关键字
self指的是调用该方法的实例,说简单点就是自己调用这个方法点那个对象,看下面这个实例
publicclass Personsay
{
var name:String =""
var age:Int =0
publicinit(name:String,age:Int)
{
self.name = name
self.age = age
}
publicfunc eat()
{
println("我正在吃饭")
}
publicfunc sayHi()
{
self.eat()
println("Hi my name is\(name),my age is\(age)")
}
}
var p1 =Personsay(name:"王迪" , age:23)
p1.sayHi()
输出:Hi my name is王迪,my age is 23
通常一个方法中调用这个类中的其他属性,方法都是可以省略self的
(3)关于初始化问题:
publicclass FiexedLengthRange
{
publicvar start:Int
publicvar length:Int
public init()
{
start=0
length=0
}
publicinit(start:Int,length:Int)
{
self.start = start
self.length = length
}
publicfunc info()
{
println("the start=\(start),the lenghth=\(length)")
}
}
var fix=FiexedLengthRange(start:10,length:20)
fix.info()
关于初始化,第一种就是手动初始化如:var a:int = 0,第二种是写init()方法进行初始化
(4)结构体
struct StrutsTest
{
var a:Int
let b:Int
}
var tt =StrutsTest(a:12,b:13)
println("a=\(tt.a),b=\(tt.b)")
输出:a=12,b=13
struct StrutsTest2
{
var a:Int =10
let b:Int =20
}
var tt2 = StrutsTest2()
println("a=\(tt2.a),b=\(tt2.b)")
输出:a=10,b=20
结构体的初始化也有两种一种是自己给里面的属性定义,还有一种就是使用系统提供的初始化构造器如:StrutsTest(a:12,b:13)