Swift--10结构体
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 { if x==0 || y==0 { return true } return false } //除了构造方法,其它方法中不能修改成员变量,除非添加mutating mutating func changeToOriginal() { x = 0 y = 0 } //可以定义结构体方法(不属于任何实例变量,通过结构体名调用,类似于类方法) static func structFunc() { print("This is struct function") } //可以定义结构体变量(不属于任何实例变量,通过结构体名调用) static var 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 { //origin和size为存储属性 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 return Point(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("产生随机数") return Int(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) //测试属性监视器 rect.property = 100 //即将设置 //已经设置 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |