Swift属性
属性的存储
属性的主要作用是存储数据,可以常量属性和变量属 性;
- struct FixedLengthRange {
- var firstValue: Int let length: Int
- }
- var rangeOfThreeItems =FixedLengthRange(firstValue: 0,
- length: 3)
- // the range represents integer values 0, 1, and2 rangeOfThreeItems.firstValue = 6
- // the range now represents integer values 6, 7, and 8
但是 rangeOfFourItems 实例为常量属性也是不可以修改的。
l
- et rangeOfFourItems = FixedLengthRange(firstValue: 0, length: 4)
- // this range represents integer values 0, 1, 2, and 3 rangeOfFourItems.firstValue = 6
延时存储属性
延时存储属性是初始化时候不分配值,直到第一次使 用它。
属性@lazy 声明。
- class DataImporter {
- /*
- DataImporter is a class to import data from anexternalfile.
- The class is assumed to take a non-trivial amount of time toinitialize.
- */
- var fileName = "data.txt"
- // the DataImporter class would provide dataimporting functionality here
- }
- class DataManager {
- @lazy varimporter= DataImporter()
- var data = ""
- // the DataManager class would provide data management functionality here
- }
- let manager= DataManager() manager.data += "Some data" manager.data += "Some more data"
- println(manager.importer.fileName)
计算属性
有的时候一些属性是通过其他的属性计算得出的,通 过 get 和 set 访问器对其访问。
- //定义 Point struct Point {
- var x =0.0, y = 0.0
- }
- //定义 Size struct Size {
- var width = 0.0, height = 0.0
- }
- //定义 Rect 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)
- }
- }
- }
- 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))")
属性观察者
为了监听属性的变化,swift 通过了属性观察者。
• willSet 观察者是在存储之前调用。
• didSet 新值存储后调用。
- class StepCounter {
- var totalSteps: Int = 0{
- willSet(newTotalSteps) {
- println("About to set totalSteps to
- \(newTotalSteps)")
- }
- didSet {
- if totalSteps >oldValue {
- steps")
- }
- println("Added \(totalSteps - oldValue)
- }
- let stepCounter = StepCounter()
- stepCounter.totalSteps = 200
- // About to set totalStepsto 200
- // Added200steps stepCounter.totalSteps = 360
- // About to set totalStepsto 360
- // Added160steps stepCounter.totalSteps = 896
- // About to set totalStepsto 896
- // Added536steps
静态属性
静态属性在结构体中使用 static 定义,类中使用 class
定义。
- struct SomeStructure {
- static var storedTypeProperty = "Some value."static var computedTypeProperty: Int{
- // return anInt value here
- }
- }
- class SomeClass {
- class varcomputedTypeProperty: Int {
- // return anInt value here
- }
- }
调用的时候可以直接使用类和结构体名调用。 实例:
- struct AudioChannel {
- static letthresholdLevel= 10
- static var maxInputLevelForAllChannels= 0 var currentLevel:Int = 0 {
- didSet {
- if currentLevel > AudioChannel.thresholdLevel {
- // cap the new audio level to the threshold level
- currentLevel = AudioChannel.thresholdLevel
- if currentLevel > AudioChannel.maxInputLevelForAllChannels {
- // storethis as the new overall maximum input level
- AudioChannel.maxInputLevelForAllChannels =
- currentLevel
- }
- }
- }
- }
- var leftChannel =AudioChannel()
- var rightChannel =AudioChannel()
- leftChannel.currentLevel = 7println(leftChannel.currentLevel)
- // prints "7"
- println(AudioChannel.maxInputLevelForAllChannels)
Swift交流讨论论坛论坛:http://www.cocoagame.net
欢迎加入Swift技术交流群:362298485
Swift属性的更多相关文章
- swift 属性
属性将值和类,结构,枚举相关联.属性分为计算属性和存储属性.存储属性存储常量或变量作为实例的一部分 ,计算属性计算一个值.存储属性用于类和结构体,计算属性用于类,结构体和枚举. 1:存储属性 存储属性 ...
- Swift—属性观察者-备
为了监听属性的变化,Swift提供了属性观察者.属性观察者能够监听存储属性的变化,即便变化前后的值相同,它们也能监听到. 属性观察者主要有以下两个: willSet:观察者在修改之前调用. didSe ...
- swift 属性和方法
属性和常量 如果创建了一个结构体的实例并赋值给一个常量,则无法修改实例的任何属性: let rangeOfFourItems = FixedLengthRange(firstValue: 0, len ...
- 学习swift从青铜到王者之swift属性09
1.结构体常量和类常量的存储属性 let p1 = Person1() //p1.age = 88 不允许修改 //p11.name = "yhx1" 不允许修改 var p11 ...
- swift属性观察者机智
为了让程序能在属性被赋值时获得执行代码的机会.swift提供了属性观察者机智,属性观察者其实就两个特殊的回调方法 willSet:被观察的属性即将被赋值之前自动调用该方法 didSet:被观察的属性被 ...
- Swift - 属性观察者(willSet与didSet)
属性观察者,类似于触发器.用来监视属性的除初始化之外的属性值变化,当属性值发生改变时可以对此作出响应.有如下特点: 1,不仅可以在属性值改变后触发didSet,也可以在属性值改变前触发willSet. ...
- Swift 属性 函数
如今看cocoachina上得文章越来越有质量了,果断分享一下 原文: http://www.cocoachina.com/newbie/basic/2014/0611/8773.html 函数 函 ...
- swift 属性值变化
如果创建了一个结构体的实例并将其赋值给一个常量,则无法修改该实例的任何属性,即使有属性被声明为变量也不行. 这种行为是由于结构体(struct)属于值类型.当值类型的实例被声明为常量的时候,它的所有属 ...
- Swift学习笔记 - Swift属性只读
在OC中我们经常用到只读属性,用readonly修饰一下就行了,但在Swift中已经不是这样修饰的了,下面记录一下Swift中只读属性的使用 在OC中的只读: //只读属性 @property(rea ...
随机推荐
- Oracle数据库程序包全局变量的应用
1 前言 在程序实现过程中,经常用遇到一些全局变量或常数.在程序开发过程中,往往会将该变量或常数存储于临时表或前台程序的全局变量中,由此带来运行效率降低<频繁读取临时表>或安全隐患< ...
- Cocos2d-x——CocosBuilder官方帮助文档翻译2 多分辨率支持
Working with Multiple Resolutions 多分辨率设置 A common scenario when creating apps or games is to target ...
- SmallDateTime时间范围检查
SamllDataTime是SQL Server中的一种表达时间的类型, 精度不高但是省空间,具体的细节就查看一下MSDN的文档吧. http://msdn.microsoft.com/zh-cn/l ...
- 学习JSONP
最近自己研究 跨域调用js,然后 发现 有jsonp 这种技术,在Jquery中可以使用,于是 研究下原理 发现: 其实 就是 利用<script>的跨域访问的能力. 调用 服务端 返回的 ...
- char指针
1.在C语言中,没有字符串类型,因此使用char指针表示字符串. 2.那么问题来了,使用char* 表示字符串,到哪里是结尾呢?因此需要一个特殊的字符作为哨兵,类似迭代器中的end(),这个哨兵就是' ...
- InfluxDB安装
参考https://www.influxdata.com/downloads/#influxdb 官网 OS X brew update brew install influxdb Docker Im ...
- Codeforces Beta Round #51 C. Pie or die 博弈论找规律 有趣的题~
C. Pie or die Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/55/problem/ ...
- Cocos2d-x学习笔记(10)(CCMenu菜单)
1.CCMenu创建方式 CCMenu* menu = CCMenu::create(cocos2d::CCMenuItem* item,--)參数为CCMenuItem菜单项的对象可变參数列表 2. ...
- sql语句having子句用法,很多时候你曾忘掉
显示每个地区的总人口数和总面积.仅显示那些面积超过1000000的地区. SELECT region, SUM(population), SUM(area) FROM bbc GROUP BY reg ...
- php生成CSV格式(转)
参考网址: php对csv文件的常用操作集合 http://blog.xhbin.com/archives/748 1,下载CSV格式文档 唯一需要特别注意的是编码. <? include_on ...