类的属性和方法,// 如果结构体的属性有默认值

作者: 编程  发布:2019-11-22

 

 

/*

/*

 类的基本定义

 结构体:

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

 结构体是用于封装不同或相同类型的数据的, Swift中的结构体是一类类型, 可以定义属性和方法(甚至构造方法和析构方法等)

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

 格式:

 格式:

 struct 结构体名称 {

 class 类名称 {

 结构体属性和方法

 类的属性和方法

 }

 }

 */

 */

 

class Rect {

struct Rect {

    var width:Double = 0.0

    var width: Double = 0.0

    var height:Double = 0.0

    var height:Double = 0.0

    func show() -> Void {

}

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

// 如果结构体的属性有默认值, 可以直接使用()构造一个结构体

    }

// 如果结构体的属性没有默认值, 必须使用逐一构造器实例化结构体

}

 

// 类没有逐一构造器

var r = Rect()

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

print("width = (r.width), height = (r.height)")

 

 

var r1 = Rect()

// 结构体属性访问 使用语法

r1.show()

r.width = 99.9

var r2 = r1

r.height = 120.5

r2.show()

print("width = (r.width), height = (r.height)")

 

 

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

/*

r1.width = 100.0

 结构体构造器

r1.show()

 Swift中的结构体和类跟其它面向对象语言一样都有构造函数, 而OC是没有的

r2.show()

 Swift要求实例化一个结构体或类的时候,所有的成员变量都必须有初始值, 构造函数的意义就是用于初始化所有成员变量的, 而不是分配内存, 分配内存是系统帮我们做的.

 

 如果结构体中的所有属性都有默认值, 可以调用()构造一个结构体实例

/*

 如果结构体中的属性没有默认值, 可以自定义构造器, 并在构造器中给所有的属性赋值

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

 其实结构体有一个默认的逐一构造器, 用于在初始化时给所有属性赋值

 有:  === !==  两种类型

 */

 */

 

 

struct Rect2 {

var r3 = Rect()

    var width:Double

if r1 === r3

    var height:Double = 0.0

{

}

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

// 逐一构造器

}

var r1 = Rect2(width: 10.0, height: 10.0)

 

// 错误写法1: 顺序必须和结构体中成员的顺序一致

//var r1 = Rect2(height: 10.0, width: 10.0) // Error!

// 错误写法2: 必须包含所有成员

//var r1 = Rect2(width: 10.0)  //Error!

 

/*

 结构体中定义成员方法

 在C和OC中结构体只有属性, 而Swift中结构体中还可以定义方法

 */

 

struct Rect3 {

    var width:Double

    var height:Double = 0.0

    // 1.给结构体定义一个方法, 该方法属于该结构体

    // 2.结构体中的成员方法必须使用某个实例调用

    // 3.成员方法可以访问成员属性

    func getWidth() -> Double {

        return width

    }

}

 

var r2 = Rect3(width: 10.0, height: 10.0)

//结构体中的成员方法是和某个实例对象绑定在一起的, so, 谁调用, 方法中访问的属性就是谁

// 取得r2这个对象的宽度

print(r2.getWidth())

 

var r3 = Rect3(width: 50.0, height: 30.0)

// 取得r3这个对象的宽度

print(r3.getWidth())

 

 

/** 结构体是值类型 **/

 

struct Rect4 {

    var width:Double

    var height:Double = 0.0

    func show() -> Void {

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

    }

}

 

var r4 = Rect4(width: 10.0, height: 10.0)

var r5 = r4

print(r4)

print(r5)

 

/*

 赋值有两种情况

 1.指向同一块存储空间

 2.两个不同实例, 但内容相同

 */

r4.show()

r5.show()

r4.width = 20.0

 

// 结构体是值类型, 结构体之间的赋值其实是将r4中的值完全拷贝一份到r5中, 所以他们两个是不同的实例

r4.show()

r5.show()

 

本文由9159.com发布于编程,转载请注明出处: 类的属性和方法,// 如果结构体的属性有默认值

关键词: