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

原创 2018年04月16日 16:06:08

五、类与对象

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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wzc10101415/article/details/79961911

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

9.类析构方法(deinit)的使用//系统会自动释放不再需要的实例,以释放各种资源,在一个类的实例被释放之前,析构函数会被调用class Animal4{    var name: String  ...
  • wzc10101415
  • wzc10101415
  • 2018-04-16 17:28:33
  • 8

C++面向对象实验二:类与对象

C++实验二:类与对象一、实验目的 类的创建和使用类来创建对象。 类的数据成员的声明。 成员函数的声明和定义。 Private,public访问限定符的使用。 使用提供的公有的成员函数给对象成员赋值。...
  • acingdreamer
  • acingdreamer
  • 2016-11-24 17:25:13
  • 1044

实验一类与对象

  • 2014年07月02日 17:05
  • 110KB
  • 下载

C++实验2-类和对象1

一、问题及代码 /* * 文件名称: C++ * 作 者: 尚超 * 完成日期:2016年3月11日 * 版 本 号:v1.0 * 对任务及求解方法的描述部分: * 输入描述: * 问...
  • shang1566
  • shang1566
  • 2016-03-11 11:40:59
  • 457

C_PlusPlus学习笔记 - 3_类与对象 (C++语言程序设计【第三版】 郑莉等,清华大学出版社)

在我们熟悉的现实世界中,一切事物都是对象。对象可以是有形的,也可以是无形的。对象可以是一个个体,也可以是由诸多其他对象组成。C++支持这种抽象,将抽象后的数据和函数封装在一起,便构成C++的“类”。 ...
  • joshgu958
  • joshgu958
  • 2014-06-25 23:16:50
  • 1036

类与对象学习

  • 2014年04月14日 14:49
  • 1.76MB
  • 下载

实验二 类和对象

班级: B145A7 学号:  11   成绩:     一. 实验目的 1.理解面向对象程序设计的基本思想; 2.掌握类和对象的概念、定义和使用方法。 3.掌握不同特性对象成员的访问方法。 ...
  • benben0729
  • benben0729
  • 2015-03-27 17:40:10
  • 405

Java学习笔记(四)类与对象

1. 类与对象: 从语义上理解,类是对象的模板,对象是类的实例,从语法上理解,类是一种数据类型,对象是这种类型的变量。 在类的内部,方法可以直接访问该类的私有变量,但对于外部的类,则不...
  • MENGERN
  • MENGERN
  • 2014-07-26 21:05:43
  • 321

C++实验二 类与对象 (附答案)

一个关于C++当中类与对象的基础实验。
  • u010173859
  • u010173859
  • 2013-09-27 23:58:17
  • 2937
收藏助手
不良信息举报
您举报文章:Swift学习笔记四:类与对象(一)
举报原因:
原因补充:

(最多只允许输入30个字)