<span style="font-size:24px;">struct David { var x = 0;//定义一个结构体,两个字段x,y var y = 0;//初始值 //定义结构体的构造函数 init(){ //定义一个空构造函数,真正的构造函数,调用时候不带参数调用这里 //构造函数是以init 开头的,自动调用 // [[oc alloc]init]不是构造函数 println("in init"); } init(x:Int,y:Int){ self.x = x;//定义带有2个参数的构造函数,带双参数的时候调用这里 self.y = y; println("in init(x:y:)") } //结构体有构造函数,没有析构函数 func getCenter()->Int{ return (x+y)/2; } //给现有的点x,y加偏移量 //obj.addOffset(100,deltaY:) mutating func addOffset (deltaX:Int,deltaY:Int){ //结构体是拷贝的对象,函数内部不能修改变量 //需要修改,加关键字mutating,//mutating,可以修改构造函数内部变量 x += deltaX; y += deltaY; } }; func testDavid(){ //定义一个结构体 //结构体的定义是 结构体的名字(参数名:参数值) var d = David();//调用构造函数init() var s = David(x: 100,y: 200);//调用构造函数init(x,y) println("s.x = \(s.x),s.y = \(s.y)") let c = s.getCenter();//调用析构函数getCenter println("c is \(c)"); s.addOffset(100,deltaY: 200);//因为析构函数没有返回值,所以不能赋值给变量 println("d is :\(s.x)"); } testDavid();//测试函数调用 </span>