Swift--10结构体

来源:互联网 发布:java ssh框架学习书籍 编辑:程序博客网 时间:2024/05/18 03:18

struct Point {

    //结构体中可以定义成员变量

    var x:Double = 0

    var y:Double = 0

    //系统默认创建两个构造方法,用于初始化成员变量

    //并且不需要返回,也不需要使用func关键字

    //1、无参

    init() {

        print("无参数构造方法")

    }

    //2、带参

    init(x:Double, y: Double) {

        print("成员逐一构造器")

        self.x = x

        self.y = y

    }

    //3、构造方法可以定义多个,系统会根据调用形式进行区分

    init(newX:Double) {

        x = newX

    }

    //结构体中可以定义成员方法

    func isOnAxis() ->Bool {

        ifx==0|| y==0 {

            returntrue

        }

        returnfalse

    }

    //除了构造方法,其它方法中不能修改成员变量,除非添加mutating

    mutatingfunc changeToOriginal() {

        x =0

        y =0

    }

    //可以定义结构体方法(不属于任何实例变量,通过结构体名调用,类似于类方法)

    staticfunc structFunc() {

        print("This is struct function")

    }

    //可以定义结构体变量(不属于任何实例变量,通过结构体名调用)

    staticvar value: Int =0

}

//结构体成员逐一构造器

var p1 = Point(x:100, y: 0)

//若所有成员变量有初值则可以使用无参的形式

var p2 = Point()

p2.x =10

p2.y =20

print(p2.isOnAxis())//false

//通过自定义的构造方法创建变量

var p3 = Point(newX:10)

p3.changeToOriginal()

print(p3)//Point(x: 0.0, y: 0.0)

//结构体是值类型

var p4 = Point(x:100, y: 100)//成员逐一构造器

var p5 = p4


//改变p4的值,对p5没有任何影响

p4.changeToOriginal()

print("p5 = (\(p5.x),\(p5.y))")//p5 = (100.0, 100.0)

//调用结构体方法

Point.structFunc()//This is struct function

//调用结构体变量

Point.value =100

print(Point.value)//100



struct Size {

    var width:Double = 0.0

    var height:Double = 0.0

}


struct Rect {

    //originsize为存储属性

    var origin:Point = Point()

    var size:Size = Size()

    //center为计算属性(不能存储,是计算得来的)

    //若只有getter方法,没有setter方法,则称为只读计算属性

    var center:Point {

        //getter方法

        get {

            let x =origin.x +size.width/2

            let y =origin.y +size.height/2

            returnPoint(x: x, y: y)

        }

        //serter方法,newValue是默认的参数名,也可自己指定

        set/*(newValue)*/  {

            origin.x = newValue.x -size.width/2

            origin.y = newValue.y -size.height/2

        }

    }

    func createValue() ->Int {

        print("产生随机数")

        returnInt(arc4random())

    }

    //延迟存储属性(懒加载)

    lazy var lazyValue: Int =self.createValue()

    //属性监视器

    var property:Int = 0 {

        willSet {

            print("即将设置")

        }

        didSet {

            print("已经设置")

        }

    }

}


var rect = Rect()//无参数构造方法

rect.size =Size(width: 100, height:100)

//在第一次调用的时候才加载

print(rect.lazyValue)//3056669642


print(rect.center)

//成员逐一构造器

//Point(x: 50.0, y: 50.0)


rect.center =Point(x: 100, y:100)

print(rect.origin)

//成员逐一构造器

//Point(x: 50.0, y: 50.0)


//测试属性监视器

rect.property =100

//即将设置

//已经设置