14.类的基本定义,类型推断、安全和类型转换

/*

类的基本定义

Swift中的结构体和类非常相似, 但是又有不同之处

类是具有相同属性和方法的抽象

格式:

class 类名称 {

    类的属性和方法

}

*/

class Rect {

    var width:Double = 0.0

    var height:Double = 0.0

    func show() -> Void{

        print("width = \(width) height = \(height)")

    }

}

// 类没有逐一构造器

//var r1 = Rect(width: 10.0, height: 10.0)

var r1 = Rect()

r1.show()

var r2 = r1

r2.show()

// 类是引用类型, 结构体之间的赋值其实是将r2指向了r1的存储控件, 所以他们是两个只想同一块存储空间, 修改其中一个会影响到另外一个

r1.width = 99

r1.show()

r2.show()



/*

恒等运算符, 用于判断是否是同一个实例, 也就是是否指向同一块存储空间

=== !==

*/

var r3 = Rect()

if r1 === r3

{

    print("指向同一块存储空间")

}


第二、类的定义

import UIKit


class Student : NSObject {

    // 1.属性

    // 1> 存储属性

    // 注意一:在开发中,如果是对象或者结构体,在没有赋值的情况下通常定义为可选类型

    var name : String?

    // 注意二:在开发中,如果是基本属性类型,比如int类型,在没有赋值的情况下,通常直接给一个默认的值0

    var age : Int = 0

    

    var chineseScore : Double = 0.0

    var mathScore : Double = 0.0

    

    // 2> 计算属性

    /*

    var average : Double {

        get {

            return (chineseScore + mathScore) * 0.5

        }

        

        // 较少写set方法(默认情况下,set方法中有一个系统变量:newValue.新传入的值就再newValue)

        set {

            self.average = newValue

        }

    }

    */

    

    // 如果计算属性是一个只读属性,则可以省略get{}

    var average : Double {

        return (chineseScore + mathScore) * 0.5

    }

    

    // 3> (了解)类属性

    // 注意:

    // * 类属性用static修饰

    // * 类属性只能通过类来访问

    static var courseCount = 0

}


// 创建类的对象

let stu : Student = Student()

stu.name = "yz"

stu.age = 11

stu.chineseScore = 61.5

stu.mathScore = 97.8


if let tempName = stu.name {

    print("name is \(stu.name!), age is \(stu.age), 语文成绩:\(stu.chineseScore), 数学成绩:\(stu.mathScore)")

}


// 获取yz老师的平均成绩

print(stu.average)


Student.courseCount = 2

print(Student.courseCount)



class Person : NSObject {

    var name : String?

    var age : Int = 0

    var height : Double = 0.0

}


let p = Person()


// 注意:赋值不是调用set方法,直接拿到属性给属性赋值

p.name = "why"

p.age = 18

p.height = 1.88


第三、类型转换

/*

Swift不允许隐式类型转换, 但可以使用显示类型转换(强制类型转换)

OC:

int intValue = 10;

double doubleValue = (double)intValue;


Swift:

*/

var intValue:Int = 10

var doubleValue:Double

doubleValue = Double(intValue)

// 注意:Double()并不会修改intValue的值, 而是通过intValue的值生成一个临时的值赋值给doubleValue

print(intValue)

print(doubleValue)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章