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 {

//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

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)

ottom:0px; font-size:18px; line-height:normal; font-family:'PingFang SC'; color:rgb(30,y: 50.0)


//测试属性监视器

rect.property = 100

//即将设置

//已经设置

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...