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

Swift - 结构体

2015-06-12 11:42 417 查看
第一,结构体声明和构造函数

/** 结构体

* 1,创建结构体变量,结构体的字段都必须有初始值,否则会报错

* 2,结构体内部 只有在构造函数(init)中修改字段的值,在结构体内部中方法和属性内不能直接修改结构体内部字段的值

* 3,在结构体外部,结构体变量,可以访问结构体字段,也可以修改结构体字段的值。

*/

/** 构造函数

* 1,swift语言中指定结构体构造函数,是init方法

* 2,init执行方法,在创建结构体变量之前执行

* 3,在创建结构体题变量的参数必须和构造函数init 参数必须一致

*/

//无参构造函数

struct student {

// 第一种直接定义字段名 并且给字段名赋初始值

var age = 0;

// 第二种定义字段名并且指定字段类型

var name :String; //直接定义一个字符串字段name

//定义 无参数构造函数

init(){

name = "swift";

age = 1;

}

}

//1: student () 创建一个结构体变量 ,系统会自动调用构造函数init()

var stu = student ()

println("name = \(stu.name) , age = \(stu.age)")

运行结果:name = swift , age = 1

第2,有参数构造函数

/**

* 1,student1 (Name:"swift",Age:0) 创建结构体变量 系统会调动构造函数,并且创建结构体的参数于构造函数参数一致

* 2,student (Name:"swift",Age:0) 后面跟着的参数名称必须于构造函数参数变量名相同

*/

struct student1 {

var age = 1;

var name :String; // 直接定义一个字符串变量。

//定义 有参数构造函数

init(name:String ,age:Int){

//self 指的是当前结构体变量 self.name 当前结构体的变量的字段

self.name = name;

self.age = age;

}

}

//因为构造函数有2个参数,所对应创建结构体的变量的参数要一致

var stu1 = student1 (name: "swift-struct", age: 12)

println("name = \(stu1.name) ,age = \(stu1.age)")

//运行结果:name = swift-struct ,age = 12

第3,有参数构造函数 参数变量加 _ 用法

/**

* 1,创建结构体的对象中对应参数必须和构造函数对应的参数一致

*

* 2,如果构造函数中参数变量前加 _ 其对应创建对象的参数,不需要变量名

*

* 3,init(_ x :Double ,_ y :Double) 构造函数中对应变量前面加 _ 其对应创建对象后面不需要变量名。

*/

struct Point {

var x = 0.0;

var y = 0.0;

//init(_ x :Double ,_ y :Double) 构造函数中对应变量前面加 _ 其对应创建对象后面不需要变量名。

init (_ x:Double ,_ y:Double){

self.x = x;

self.y = y;

}

}

var p = Point(10.0,11.0)

println("x = \(p.x),y =\(p.y)")

//运行结果:x = 10.0,y =11.0

第4,结构体方法

struct Test {

//结构体里面有2个字段,一个x,一个y

var x = 0;

var y = 0; //这个=0是初值

//给现有的点,x和y加上一个deltax

//调用的适合obj.addOffset(100,deltay(形参):200);

mutating func addOffset(deltax:Int,deltay:Int){

//因为是结构体是一个拷贝的对象,是引用,从一个结构体复制另一个对象

//mutating这个关键字是告诉可以修改里面的变量

x += deltax;

y += deltay;

}

}

func testStructure(){

//可以改变初值

var s3 = Test();

s3.x = 111;

s3.y = 222;

println("s3.x = \(s3.x) s3.y = \(s3.y)")

//调用的适合obj.addOffset(100,deltay(形参):200);

s3.addOffset(100 , deltay: 200);

println("s3=\(s3.x),s3.y =\(s3.y)")

}

//别忘了调用

testStructure();

//运行结果:s3=211,s3.y =422
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: