Swift学习笔记四:类与对象(一)

五、类与对象

1.Swift的枚举(enum)类型及遍历

//关键词:enum,枚举的名称应该以一个大写字母开头

enum Orientation

{

    case North

    case South

    case East

    case West

}


Orientation.South // 点语法获取枚举成员


enum Fruit

{

    //多个枚举成员还可以在同一行定义,它们之间用逗号分割即可

    case Apple, Banana, Orange, Peach, Watermelon

}

var myFavorite = Fruit.Apple //变量会推断为枚举类型

myFavorite = .Orange


let somePlanet = Orientation.East

switch somePlanet

{

case .East:

    print("Where the sun rises.")

default:

    print("Where the sun dosen't rise")

}


enum ASCIICharacter: Character  //定义一个枚举,并设置枚举成员的值类型为字符

{

    case Tab = "\t"   //设置默认值

    case LineFeed = "\n"

    case CarriageReturn = "\r"

}

ASCIICharacter.Tab



2.给枚举类型添加方法

enum Language : Int

{

    case Swift = 2

    case ObjectiveC

    case Unknow

    

    func description()

    {

        if self == .Swift

        {

            print("Coding in swift.")

        }

        else if self == .ObjectiveC

        {

            print("Coding in Objective-C.")

        }

        else if self == .Unknow

        {

            print("Wondering...")

        }

    }

}


let swift = Language.Swift  //初始化一个枚举常量

swift.description()         //调用枚举方法

swift.rawValue              //通过枚举成员的原始值属性,可以查看该成员的原始值。原始值:是当第一次定义枚举时,用来预先填充成员的值

Language.ObjectiveC.rawValue//系统会自动为枚举成员分配一个原始值



3.Swift的结构(struct)类型及其下标(subscript)

//struct结构体是构建代码常用的一种通用灵活的构造体,通过为结构体定义属性和方法,可以扩展结构体的功能

//关键词:struct,名称通常使用首字母大写的形式

struct Animal

{

    var name: String = ""  //定义字符串类型的属性

    var age: Int = 0       //定义整型类型的属性

    

    func say()             //定义方法

    {

        print("I am \(name).")

    }

}


var animal = Animal(name: "Tiger", age: 2//实例化一个结构体对象,并设置属性值

animal.say()                                //调用结构体方法

var animal2 = animal                        //当将一个结构体对象赋值给另一个变量或常量时,采用的是复制的方式。此时animal和animal2两个变量具有不同的内存地址

animal2.name = "Bird"

print(animal2)

print(animal)


struct MySubscript

{

    var num:Int

    subscript(n: Int) -> Int //使用subscript关键词,给结构体添加一个下标操作,该下标用来返回当前属性的值得指定倍数。

    {

        return num * n

    }

}

let subscr = MySubscript(num: 5)

subscr[2]



4.类(class)的初始化方法、属性和方法

//关键字:class,其后是类的名称,首字母通常需要大写,类的具体内容在一段大括号之内。

class Person

{

    var name: String

    var age: Int

    

    //初始化方法

    init()

    {

        self.name = ""

        self.age = 0

    }

    

    //所有的convenience便利初始化方法,都必须调用同一个类中的初始化方法来完成设置,用来作为补充和提供使用上的方便

    convenience init(name: String!,age: Int!)

    {

        self.init()  //便利初始化方法,是不能被自雷重写,或者是在子类中以supper的方式调用的

        self.name = name

        self.age = age

    }

    

    //给类添加方法

    func say()

    {

        print("Hi, I am \(name), and \(age) years old.")

    }

}


let person = Person() //创建类的实例

person.name = "Jerry"

person.age = 35

person.say()


let secondPerson = Person(name: "Bill", age: 32)

secondPerson.say()



5.类的引用(reference)特征

//与值类型不同,引用类型在被赋予到一个变量,常量或者被传递到一个函数时,操作的并不是其拷贝,而是已存在的实力本身

class Animals

{

    var name: String

    var age: Int

    

    init(animalName: String, age: Int)

    {

        self.name = animalName

        self.age = 0

    }

    

    func say()

    {

        print("Hi, I am \(name).")

    }

}


let animal3 = Animals(animalName: "Will", age: 20)

let animal4 = animal3

animal4.name = "Tom"

animal3.say()

animal4.say()



6.类和结构体两个类型的比较

//结构体对象之间的值传递,采用的是拷贝的方式,所以两个对象都是相对独立的,一方发生变化,不会对另一方产生影响,即:值类型

//类对象之间的值传递,采用的是引用的方式,即:引用类型

struct Animal3

{

    var name: String

    var age: Int

}


let tiger = Animal3(name: "Tiger", age: 2)

var lion = tiger

lion.name = "Lion"

print(tiger.name)

print(lion.name)


class Person1

{

    var name: String

    var age: Int

    

    init()

    {

        self.name = ""

        self.age = 0

    }

}

let person3 = Person1()

let person4 = person3

person4.name = "Jerry"

print(person3.name)

print(person4.name)

person4 === person3 //使用全等号,来比较对同一个实例进行引用的两个对象



7.类属性的set和get方法解析

//get和set关键词被称为计算属性。它的目的是在取值和赋值时,执行里面的代码。

class Player

{

    var name: String = "Sam"

    var level: Int = 3

    var score: Double

    {

        get

        {

            return Double(level) * 2.0

        }

        set(newScore)

        {

            level = Int(newScore) / 2

        }

    }

}


var player = Player()

player.score

player.score = 4

player.level



8.类属性的willSet和didSet方法解析

//类的属性还拥有willSet和didSet这两个特性,它们被用来监视属性除初始化之外的值变化。

class Player1

{

    var name: String = "Sam"

    var level: Int = 3

    var score: Double = 0.0

    {

        willSet

        {

            if level == 3

            {

                print("Be careful!")

            }

            else

            {

                print("Go ahead!")

            }

        }

        didSet

        {

            print("Do something!")

        }

    }

}

var player1 = Player1()

player1.score

player1.score = 12

player1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值