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

原创 2018年04月16日 17:28:33

9.类析构方法(deinit)的使用

//系统会自动释放不再需要的实例,以释放各种资源,在一个类的实例被释放之前,析构函数会被调用

class Animal4

{

    var name: String

    var age: Int

    

    init(name: String, age: Int)

    {

        self.name = name

        self.age = 0

    }

    

    func say()

    {

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

    }

    

    //使用关键词deinit来定义析构函数,析构函数是在实例释放发生之前被自动调用的

    deinit

    {

        print("I'm deinited")

    }

}


var animal5: Animal4? = Animal4(name: "Jerry", age: 33)

animal5?.say()

animal5 = nil



10.给类添加下标(subscript)

//下标是访问集合、列表、序列中的元素的快捷方式,结构体、枚举和类都可以定义下标。

class Person2

{

    var name: String = "Rocky"

    var age: Int = 20

    var height: Double = 130

    

    subscript(index: Int) -> AnyObject //添加一个下标操作,该下标拥有一个整型参数,并返回任意类型的对象。

    {

        switch index

        {

        case 0:

            return name as AnyObject

        case 1:

            return age as AnyObject

        case 2:

            return height as AnyObject

        default:

            return name as AnyObject

        }

    }

}


let person5 = Person2()

person5[0]

person5[1]

person5[2]



11.类的静态方法(class func)

//类的静态方法,也称为类型方法。实例方法是被类型的某个实例调用的方法,而静态方法则是被类型本身调用的方法。

class MathTool

{

    func alert()

    {

        print("Caculating...")

    }

    func sum(num1: Int, num2: Int) -> Int

    {

        alert()

        return num1 + num2

    }

    

    //使用关键词class定义一个静态方法

    class func multiply(num1: Int, num2: Int) -> Int

    {

        return num1 * num2

    }

}


let tool = MathTool()

tool.sum(num1: 1, num2: 1)

//当需要调用静态方法时,需要使用类型而不是实例。静态方法使用方便,项目中的工具类,往往包含大量的静态方法。

MathTool.multiply(num1: 2, num2: 3)



12.讲一个类的实例作为另一个类的属性

class Animal5

{

    var name: String = "Lovely Dog"

    var age: Int = 1

}


class Person3

{

    var name: String = "Jerry"

    var age: Int = 33

    lazy var pet: Animal5 = Animal5() //初始化一个懒加载的属性,具有懒加载特性的对象,只有在使用到它时,才会真正被加载到内存中。

}


var person7 = Person3()

person7.age = 11

person7.pet = Animal5()

person7.pet.name = "Sweety Cat"

person7



13.类的继承以及方法的重写(override)

//一个类可以继承另一个类的方法、属性和其他特性。当一个类继承其他类时,继承类叫子类,被继承类叫父类。继承是区分类和其他类型的一个重要特性。

class Animal6

{

    func say()

    {

        print("I'm animal.")

    }

}


//父类的名称位于子类名称的后方,并用冒号进行分割

class Dog: Animal6

{

    var name: String

    

    init(name: String)

    {

        self.name = name

    }

    

    //子类可以为继承来的实例方法、静态方法、实例属性或下标,提供自己定制的实现。我们把这种行为叫做重写。

    override func say()

    {

        super.say()

        print("I'm a dog, my name is \(name).")

    }

}


var dog = Dog(name: "Nono")

dog.say()



14.父类在实例类型转化时的应用

class Creature

{

    var name: String

    init(name: String)

    {

        self.name = name

    }

}


class Dog1: Creature

{

    var master: String

    init(name: String, master: String)

    {

        self.master = master

        super.init(name: name)

    }

}


//创建作为父类的生物类型的数组

let creatures:[Creature] =

    [

        Dog1(name: "Nono", master: "John"),

        Dog1(name: "BAILEY", master: "Smith"),

        Dog1(name: "TOBY", master: "Bill")

]


for object in creatures

{

    //通过as!标识符将遍历到的元素,将他们的类型从父类,强制转换为子类的类型。

    let dog = object as! Dog1

    print("Dog: '\(dog.name)', belongs to \(dog.master)")

}


for dog in creatures as! [Dog1]

{

    print("Dog: '\(dog.name)', belongs to \(dog.master)")

}



15.使用is语句检查实例的类型

//类型检查是一种检查类实例的方式,并且也是让实例作为它的父类或者子类的一种方式

//类型检测使用is和as操作符实现。这两个操作符提供了一种简单达意的方式,去检查值的类型或者转换它们的类型。

class Creature1

{

    var name: String

    init(name: String)

    {

        self.name = name

    }

}


class Dog2: Creature1

{

    var master: String

    init(name: String, master: String)

    {

        self.master = master

        super.init(name: name)

    }

}


class Bird: Creature1

{

    var food: String

    init(name:String, food: String)

    {

        self.food = food

        super.init(name: name)

    }

}


let creatures1:[Creature1] =

    [

        Dog2(name: "Nono", master: "John"),

        Bird(name: "MAX", food: "Bugs"),

        Dog2(name: "BAILEY", master: "Smith"),

        Bird(name: "CHARLIE", food: "Spider"),

        Dog2(name: "TOBY", master: "Bill")

]


var dogCount = 0

var birdCount = 0


for item in creatures1

{

    if item is Dog2

    {

        dogCount += 1

    }

    else if item is Bird

    {

        birdCount += 1

    }

}


dogCount

birdCount


for item in creatures1

{

    if let dog = item as? Dog2

    {

        print("Dog: \(dog.name), belongs to \(dog.master)")

    }

    else if let bird = item as? Bird

    {

        print("Bird: '\(bird.name)', loves \(bird.food)")

    }

}



16.使用Any表示任意值类型

//Anyobject可以代表任何class类型的实例。此外还有一个Any,它可以表示任何类型,除了方法类型。

var anythings = [Any]() //定义一个Any类型的数组,该数组可以装载各种类型的数据。


anythings.append(8)

anythings.append(3.14156)

anythings.append("hello")

anythings.append((3.0, 5.0))

anythings


for item in anythings

{

    switch item

    {

    case let someInt as Int:

        print("An integer value of \(someInt)")

    case let someDouble as Double:

        print("A double value of \(someDouble)")

    case let someString as String:

        print("A string value of \(someString)")

    case let (x, y) as (Double, Double):

        print("An (x, y) point at \(x), \(y)")

    default:

        print("Something else")

    }

}

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

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

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

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

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

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

一个关于C++当中类与对象的基础实验。
  • u010173859
  • u010173859
  • 2013-09-27 23:58:17
  • 2948

Java实验二类与对象

  • 2009年06月25日 18:13
  • 61KB
  • 下载

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

五、类与对象1.Swift的枚举(enum)类型及遍历//关键词:enum,枚举的名称应该以一个大写字母开头enum Orientation{    case North    case South ...
  • wzc10101415
  • wzc10101415
  • 2018-04-16 16:06:08
  • 11

实验二 类和对象

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

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

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

类与对象学习

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

实验四 类与对象(二)

1.对象实例的引用      修改后的代码 class Card{ int id; double balance; Card(int id,double balance){ ...
  • cpp_jia
  • cpp_jia
  • 2013-03-27 14:42:11
  • 430
收藏助手
不良信息举报
您举报文章:Swift学习笔记四:类与对象(二)
举报原因:
原因补充:

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