swift结构体
struct Student {
//从宏观角度开,成为成员属性,实例属性
var age = 0
var height = 2
//添加方法 成为成员方法,实例方法
func study() {
print("无参无返回值")
}
//类型方法,类型属性 [类似于OC中的类方法]
static var weight = 0
static func eat() {
print("类型方法 eat")
}
//在结构体方法中,如果要修改属性的值,必须使用mutaing关键字修饰方法
mutating func modifyValue () {
age = 100;//不能修改属性的值 如果要修改属性的值,必须使用mutaing关键字修饰方法
}
}
//调用方法 定义结构体的实例
var stu = Student()
stu.age = 20
stu.height = 180
stu.study()
//
Student.weight = 10;
print(stu.age,"student.age")
//
Student.eat();
//结构体是值类型的,赋值给一个变量对象被修改,原对象不变
var stu1 = stu;
stu1.age = 30
print(stu.age, "stu1.age")
print(stu1.age, "stu1.age")
//在结构体中成员变量必须赋初值,可以在定义成员时直接赋值,也可以在构造方法中赋值
struct Point {
//x,y 赋值是,构造方法会报错,必须赋初值
//从属性的角度被称为存储属性
var x = 0
var y = 0
//结构体中默认有两个构造方法,一个不带参数,一个逐一赋值
//构造方法可以实现成员方的初始化操作
init() {
x = 0
}
// init(x : Int) {
// self.x = x
// }
//逐一构造方法
init(x : Int, y :Int) {
self.x = x
self.y = y
}
}
var p = Point() //等价于
var p1 = Point.init()
struct Size {
var width = 0
var height = 0
}
//矩形结构体
struct Rect {
var p = Point(x: 2, y: 2);
var s = Size()
//计算属性 [可以只有个getter 或两者都有 不能只要setter
var center : Point {
get {
var temp = Point()
temp.x = p.x + s.width/2
temp.y = p.y + s.height/2
return temp
}
// set(newCenter) {
// p.x = newCenter.x - s.width/2
// p.y = newCenter.y - s.height/2
// }
//newValue 是结构体内部的值,不写参数时,用newValue
set {
p.x = newValue.x - s.width/2
p.y = newValue.y - s.height/2
}
}
//属性监视器
var observValue: Int = 0{
willSet {
//将要设置值的
print("将要修改")
}
didSet {
//已经修改
print("已经修改")
}
}
}
var rect = Rect()
rect.p = Point(x: 2, y: 2)
rect.s = Size(width: 100, height: 100)
let center = rect.center;
print(center)
rect.center = Point(x: 60, y: 60)
print(rect.p)
rect.observValue = 100
优质内容筛选与推荐>>