您的位置:首页 > 移动开发 > Swift

swift-结构体

2016-02-01 14:02 176 查看
import Foundation

//定义一个结构体
//swift的结构体中可以 定义成员变量 和成员变量方法

//内部有构造函数 但是没有析构函数
//结构体类型
struct MyStudent {
//在定义的时候可以初始化成员变量
var age:Int = 0
var height:Int = 0
//内部自动会实现一个无参的构造 和 带参数的构造
}
//结构体中的成员变量 必须要初始化
//1.在定义成员变量的时候初始化 2.或者在构造函数中初始化

//创建一个结构体变量
var xiaohong:MyStudent = MyStudent()//里面会自动调用 内部的init()无参的构造

//获取成员变量的值 通过'.'获取
print("xiaohong_age = \(xiaohong.age) height = \(xiaohong.height)")

//直接用点操作
//对成员变量赋值
xiaohong.age = 24
xiaohong.height = 170
print("xiaohong_age = \(xiaohong.age) height = \(xiaohong.height)")

var xiaohuang:MyStudent = MyStudent(age: 25, height: 180) //会自动调用内部的带参数的构造

print("xiaohuang_age = \(xiaohuang.age) height = \(xiaohuang.height)")

//构造函数:在创建变量空间的同时自动调用的函数 就是构造函数
//构造函数的功能:初始化 成员变量
//和c++的构造函数类似  和 OC的初始化函数init 类似

//2.下面我们自己实现构造函数
struct MyStu {
var age:Int
var height:Int
//无参数的构造函数  构造函数前不需要加 func
init() {
print("无参数的构造函数init()")
//        age = 25
//        height = 180
//建议用self.age
self.age = 25
self.height = 180
}
//带参数的构造函数
//有参数的构造函数调用的时候 会自动加标签
init(age:Int,height:Int) {
//因为带参数的构造 的参数名 经常和成员变量同名 所以下面在赋值时建议使用self.age
//在结构体内部操作成员变量一般都是使用self.xxx
self.age = age
self.height = height
print("有参数的构造被调用")
}
//一个结构体中可以有多个 构造函数
/*参数名也可以起其他的名字
init(newAge:Int,newHeight:Int) {
//因为带参数的构造 的参数名 经常和成员变量同名 所以下面在赋值时建议使用self.age
//在结构体内部操作成员变量一般都是使用self.xxx
self.age = newAge
self.height = newHeight
}*/

//可以定义其他方法
func sleep() {
print("呼呼大睡")
}

func jump () {
//self.age = 10 //在其他函数中默认是不能修改成员变量的值
}

mutating func changeAgeZero() {
//如果结构体中的函数要修改成员变量 那么在定义的时候嵌套加mutating 关键字
self.age = 0
}

}
var stu1:MyStu = MyStu()//自动调用内部的init()无参的构造

print("stu1_age = \(stu1.age)  \(stu1.height)")

//有参数的构造调用
var stu2:MyStu = MyStu(age: 30, height: 188)//自动调用内部的init有参数的构造

print("stu2_age = \(stu2.age)  \(stu2.height)")

//调用结构体里面的方法
stu2.sleep()
stu1.sleep()

stu2.changeAgeZero()
print("stu2_age = \(stu2.age)  \(stu2.height)")
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: