Swift学习笔记-面向对象

前端之家收集整理的这篇文章主要介绍了Swift学习笔记-面向对象前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
//1.Swift可以定义枚举,结构体,类,3种面向对象的类型,面向对象的两大核心是类和对象
//2.面向对象编程的3大特征,封装,继承(Swift使用协议弥补了单继承灵活性不足的缺点),多态
//3.C语言中结构体和枚举不具有面向对象的特征,Swift中多了结构体和枚举这两种程序单元


//1.枚举
//Swift的枚举不像c那么简单,是完全重新定义的类型,支持计算属性,实例方法,类型方法支持定义构造器来完成初始化,允许通过扩展来增强原有枚举的功能,允许遵守指定协议来提供标准的功能
//1.1定义枚举,使用enum
//语法格式,枚举名首字母大写
/** * enum 枚举名 { //使用case关键字列出所有的枚举值 //枚举的其他成员 } */
enum People
{
    //每一个case定义一个枚举实例
    case Man
    case Female
}

enum StrongPeople
{
    //一个case 定义多个枚举实例
    case Man,Female
}

/** * 面向对象编程的五大点(牢记) 1,声明变量 2.创建实例 3,访问类型属性 4调用类型方法 5,派生子类,但是Swift只有类支持继承,枚举和结构体不支持继承 */

//使用枚举声明变量
var manPeople :StrongPeople
//赋值
manPeople = StrongPeople.Man
//当Swift能推断出枚举类型时,允许省略枚举名前缀
//manPeople = .Man
println(manPeople)

//1.2枚举值和switch语句
var choosePeople = StrongPeople.Man
//使用switch语句判断枚举
//是个男的
switch (choosePeople)
{
case StrongPeople.Man:
    println("是个男的")
case StrongPeople.Female:
    println("是个女的")
}

//带有原始值的枚举
//需要注意的是,Swift可以通过已指定的原始的枚举来推断它前后的枚举值
/** * enum 枚举名 : 原始类型 { case 枚举值 = 原始值 } */

//定义枚举,原始值类型为Int
enum Weekday : Int
{
    //使用一个case,swift推断Monday= 0,Thursday = 6,Friday = 7
    case Monday,Tuesday = 1,Wednesday = 5,Thursday,Friday
}

//如果指定的原始值类型不是Int,而是String,Character,Swift不能推断枚举的原始值
enum Season : Character
{
    case Spring = "S"
    case Summer = "U"
}

var day = Weekday.Monday
//获取枚举值的原始值
println("\(day.rawValue)")//0
day = .Thursday
println("\(day.rawValue)")//6

//根据原始值获取枚举值
//is U
var mySea = Season(rawValue: "S")
if mySea != nil
{
    switch mySea!
    {
    case .Spring:
        println("is U")
    case .Summer:
        println("is S")
    }
}

//rawValue是枚举值属性,该属性用于获取枚举的原始值

//关联值,Swift不要求各枚举成员具有相同的关联值 associated value
/** * 语法格式 case 枚举值(元组语法) */
//定义枚举
enum Plant
{
    //不同枚举值可以携带数量不等,类型不等的关联值
    case Mercury(weight:Double,density:Double,name:String)
    case valus(Double,Double)
    case Jupiter
    case Saturn
}

//引用类型的比较
//===,!==返回true,false

//self关键字

class Dog1
{
    //实现一个jump的方法
    func jump()
    {
        println("正在jump")
    }

    //实现一个跑的方法
    func run()
    {
        jump()
// self.jump()
        println("正在跑")
    }
}


//局部变量隐藏存储属性
class Wolf
{
    //定义两个属性
    var name : String = ""
    var age : Int = 2
    //显示定义带参数的构造器
    init (name :String,age : Int)
    {
        //当局不变量隐藏存储属性
        //可用self代表调用该构造器正在初始化的实例
        //这个可以为该构造器正在初始化的实例的存储属性赋值

        self.name = name
        self.age = age
    }
    //定义一个info
    func info()
    {
        println("\(name),\(age)")
    }
}
var wolf = Wolf(name:"JiangJum",age: 24)
wolf.info()//JiangJum,24

//当self作为方法调用
class ReturnSelf
{
    var age : Int = 0
    func grow() -> ReturnSelf
    {
        age++
        return self
    }
}
var rt = ReturnSelf()
rt.grow()
    .grow()
    .grow()

println("\(rt.age)")//3

struct FixedLengthRange {
    var strat :Int
    let length : Int
    //由于系统会为该结构体提供初始化所有存储属性的构造器
    //因此程序可以在定义时不为实例存储属性指定初始值

}

//初始化
var rg = FixedLengthRange(strat: 2,length: 3)
println("\(rg.strat),\(rg.length)")//2.3

rg.strat = 5
//rg.length = 6//常量存储属性,无法重新赋值

struct FkRange {
    //定义两个变量存储属性
    var start : Int
    var length : Int
}

let rg1 = FkRange(start: 3,length: 4)
println("\(rg1.start),\(rg1.length)")//3,4
//rg1.strat = 4//编译错误
//由于实例被赋值给一个let声明的常量,因此FkRange就是一个不可变的,不允许修改


//lazy load 懒加载
class Dept3
{
    var id : Int
    var info : String
    init (id : Int)
    {
    self.id = id
        //暂停2秒
        NSThread.sleepForTimeInterval(2)
    self.info = "模拟读取数据"
    }
}

class User {
    var id : Int = 0
// var dept = Dept3(id: 4)
    lazy var dept = Dept3(id: 3)
    var nicks = [String]()
}
//创建user实例
var user = User()
user.nicks.append("JiangJun")
user.nicks.append("jiangjum")
println(user.nicks)

猜你在找的Swift相关文章