加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift与properties

发布时间:2020-12-14 02:15:48 所属栏目:百科 来源:网络整理
导读:import Foundation // 一个存储属性就是存储在特定类或结构体的实例里的一个常量或变量 struct FixedLengthRange { var firstValue: Int let length: Int } var rangeOfThreeItems = FixedLengthRange(firstValue: 0 ,length: 3 ) // 该区间表示整数 0 , 1

import Foundation


//一个存储属性就是存储在特定类或结构体的实例里的一个常量或变量

struct FixedLengthRange {

var firstValue: Int

let length: Int

}

var rangeOfThreeItems = FixedLengthRange(firstValue: 0,length: 3)

// 该区间表示整数012

rangeOfThreeItems.firstValue = 6

// 该区间现在表示整数678




//常量和存储属性

let rangeOfFourItems = FixedLengthRange(firstValue: 0,length: 4)

// 该区间表示整数0123

//rangeOfFourItems.firstValue = 6

// 尽管firstValue诗歌变量属性,这里还是会报错





//延迟存储属性。延迟存储属性是指 当第一次被调用的时候才会计算其初始值的属性

//在属性声明前使用lazy来标示一个延迟存储属性,必须将延迟存储属性声明成变量

class DataImporter {

/*

DataImporter 是一个将外部文件中的数据导入的类。

这个类的初始化会消耗不少时间。

*/

var fileName = "data.txt"

// 这是提供数据导入功能

}


class DataManager {

lazy var importer = DataImporter()

var data = [String]()

// 这是提供数据管理功能

}


let manager = DataManager()

manager.data.append("Some data")

manager.data.append("Some more data")

// DataImporter 实例的 importer 属性还没有被创建


println(manager.importer.fileName)

// DataImporter 实例的 importer 属性现在被创建了

// 输出 "data.txt”






//计算属性。类、结构体和枚举可以定义 计算属性,计算属性不直接存储值,而是提供一个 getter 来获取值,一个可选的 setter 来间接设置其他属性或变量的值

struct Point {

var x = 0.0,y = 0.0

}

struct Size {

var width = 0.0,height = 0.0

}

struct Rect {

var origin = Point()

var size = Size()

var center: Point {

get {

let centerX = origin.x + (size.width / 2)

let centerY = origin.y + (size.height / 2)

return Point(x: centerX,y: centerY)

}

set(newCenter) {

origin.x = newCenter.x - (size.width / 2)

origin.y = newCenter.y - (size.height / 2)

}

/*

set {

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

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

}

*/

}

}

var square = Rect(origin: Point(x: 0.0,y: 0.0),size: Size(width: 10.0,height: 10.0))

let initialSquareCenter = square.center

square.center = Point(x: 15.0,y: 15.0)

println("square.origin is now at ((square.origin.x),(square.origin.y))")

// 输出 "square.origin is now at (10.0,10.0)




//只读计算属性

struct Cuboid {

var width = 0.0,height = 0.0,depth = 0.0

//只读计算属性的声明可以去掉get关键字和花括号

var volume: Double {

return width * height * depth

}

}

let fourByFiveByTwo = Cuboid(width: 4.0,height: 5.0,depth: 2.0)

println("the volume of fourByFiveByTwo is (fourByFiveByTwo.volume)")

// 输出 "the volume of fourByFiveByTwo is 40.0





//属性监视器

//属性监视器监控和响应属性值的变化,每次属性被设置值的时候都会调用属性监视器,甚至新的值和现在的值相同的时候也不例外

//可以为除了延迟存储属性之外的其他存储属性添加属性监视器,也可以通过重载属性的方式为继承的属性(包括存储属性和计算属性)添加属性监视器

class StepCounter {

var totalSteps: Int = 0 {

willSet(newTotalSteps) {

println("About to set totalSteps to (newTotalSteps)")

}

didSet {

if totalSteps > oldValue {

println("Added (totalSteps - oldValue) steps")

}

}

}

}

let stepCounter = StepCounter()

stepCounter.totalSteps = 200

// About to set totalSteps to 200

// Added 200 steps

stepCounter.totalSteps = 360

// About to set totalSteps to 360

// Added 160 steps

stepCounter.totalSteps = 896

// About to set totalSteps to 896

// Added 536 steps

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读