Swift 3.0 学习笔记之Properties

计算属性由类,结构和枚举提供。 存储属性仅由类和结构提供。

Stored Properties  存储属性

struct FixedLengthRange{

       var firstValue:Int

       let length:Int

}

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

// the range represents integer values 0, 1, and 2

rangeOfThreeItems.firstValue=6

// the range now represents integer values 6, 7, and 8

Stored Properties of Constant Structure Instances  常量结构实例的存储属性

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

// this range represents integer values 0, 1, 2, and 3

rangeOfFourItems.firstValue=6

// this will report an error, even though firstValue is a variable property 因为rangeOfFourItems这是一个常量 , 它的属性值无法改变

Lazy Stored Properties     延迟存储属性

Note:您必须始终将lazy属性声明为变量(使用var关键字),因为它的初始值可能无法在实例初始化完成后检索。 常量属性在初始化完成之前必须始终具有值,因此不能声明为延迟。

class DataImporter{

       /*   DataImporter is a class to import data from an external file. The class is assumed to take a non-trivial amount of time to initialize.     */

      var fileName="data.txt"

      // the DataImporter class would provide data importing functionality here

}

class DataManager{

        lazy var importer=DataImporter()

        var data= [String]()

        // the DataManager class would provide data management functionality here

}

let manager=DataManager()     //实例化这个类 ,包括类里面的属性(除了延迟属性)

manager.data.append("Some data")

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

// the DataImporter instance for the importer property has not yet been created

print(manager.importer.fileName)   // 现在才实例化类里面的延迟属性

// the DataImporter instance for the importer property has now been created

// Prints "data.txt"

Note:如果标记有lazy修饰符的属性由多个线程同时访问,并且该属性尚未初始化,则不能保证该属性只被初始化一次。

Computed Properties    计算属性  

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)

             }

       }

}

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现在是(5,5)square.origin是(0,0)square.size = (10.0,10.0) square.center是通过计算属性的getter方法计算出来的

square.center=Point(x:15.0,y:15.0) // square.center现在是(15,15)square.origin是(10,10)square.size = (10.0,10.0)  square.origin是通过计算属性的setter方法计算出来的

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

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

Read-Only Computed Properties      只读计算属性    那就把setter方法去掉

Property Observers 属性观察器

willSet is called just before the value is stored.

didSet is called immediately after the new value is stored.

class StepCounter{

          var totalSteps:Int=0{

                willSet(newTotalSteps) {

                      print("About to set totalSteps to\(newTotalSteps)")

                }

                didSet{

                      if totalSteps>oldValue {

                             print("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

Global and Local Variables   全局和局部变量

Type Properties   类属性

struct SomeStructure{

          static var storedTypeProperty="Some value."

          static var computedTypeProperty:Int{

                       return 1

          }

}

enum SomeEnumeration{

         static var storedTypeProperty="Some value."

         static var computedTypeProperty:Int{

                       return 6

         }

}

class SomeClass{

          static var storedTypeProperty="Some value."

          static var computedTypeProperty:Int{

                   return 27

          }

          class var overrideableComputedTypeProperty:Int{

                    return107

          }

}

访问 和 设置 类属性

print(SomeStructure.storedTypeProperty)

// Prints "Some value."

SomeStructure.storedTypeProperty="Another value."

print(SomeStructure.storedTypeProperty)

// Prints "Another value."

print(SomeEnumeration.computedTypeProperty)

// Prints "6"

print(SomeClass.computedTypeProperty)

// Prints "27"

struct AudioChannel{

       static let thresholdLevel=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 {

                                  // store this as the new overall maximum input level

                                 AudioChannel.maxInputLevelForAllChannels=currentLevel

                       }

              }

       }

}

var leftChannel=AudioChannel()

var rightChannel=AudioChannel()

leftChannel.currentLevel=7

print(leftChannel.currentLevel)      // Prints "7"

print(AudioChannel.maxInputLevelForAllChannels)        // Prints "7"

rightChannel.currentLevel=11

print(rightChannel.currentLevel)        // Prints "10"

print(AudioChannel.maxInputLevelForAllChannels)        // Prints "10"

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,723评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,485评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,998评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,323评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,355评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,079评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,389评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,019评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,519评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,971评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,100评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,738评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,293评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,289评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,517评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,547评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,834评论 2 345

推荐阅读更多精彩内容

  • 1,关于新版健身计划 今天是我践行新的健身计划的第10天,从上周一(4月3日)开始,每周一到周六,周日休息,今天是...
    周书恒阅读 140评论 2 2
  • 知识给人自信! 学习加深对知识的认识和理解! 学习提供更宽广的思路! 学习跟大师交流,更加走进大师的世界! 有时候...
    乌龟的慢生活阅读 334评论 0 0
  • 摘自51testing软件测试网,原文链接自动化测试用例设计原则。 很多公司在实施自动化测试的过程中,往往会把所有...
    Leo_0626阅读 4,158评论 0 11
  • 1. 午后,我不能抑制自己,放下平板,一脸傲娇地抽出《妖精的小孩》这本书,一路小跑到一楼,坐在沙发上就津津有味地读...
    中二火华阅读 385评论 0 1
  • 小序: 万千世界或许有很多如果,有很多想得却得不到的,但是那又如何,得不到只是自己心伤罢了在别人眼里可能就是你不配...
    usedtodosth阅读 227评论 0 0