zoukankan      html  css  js  c++  java
  • Swift属性

    属性的存储

    属性的主要作用是存储数据,可以常量属性和变量属 性;

    [html] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. struct FixedLengthRange {  
    2. var firstValue: Int let length: Int  
    3. }  
    4. var rangeOfThreeItems =FixedLengthRange(firstValue: 0,  
    5. length: 3)   
    6. // the range represents integer values 0, 1, and2 rangeOfThreeItems.firstValue = 6  
    7. // the range now represents integer values 6, 7, and 8  

    但是 rangeOfFourItems 实例为常量属性也是不可以修改的。

    l

    [html] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. et rangeOfFourItems = FixedLengthRange(firstValue: 0, length: 4)  
    2. // this range represents integer values 0, 1, 2, and 3 rangeOfFourItems.firstValue = 6  

    延时存储属性

    延时存储属性是初始化时候不分配值,直到第一次使 用它。

    属性@lazy 声明。

    [html] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. class DataImporter {  
    2. /*  
    3. DataImporter is a class to import data from anexternalfile.  
    4. The   class  is assumed     to  take  a  non-trivial amount of time toinitialize.  
    5. */  
    6. var fileName = "data.txt"  
    7. // the  DataImporter   class  would   provide  dataimporting functionality here  
    8. }  
    9. class DataManager {  
    10. @lazy varimporter= DataImporter()  
    11. var data = ""  
    12. // the DataManager class would provide data management functionality here  
    13. }  
    14. let manager= DataManager() manager.data += "Some data" manager.data += "Some more data"  
    15. println(manager.importer.fileName)  

    计算属性

    有的时候一些属性是通过其他的属性计算得出的,通 过 get 和 set 访问器对其访问。

    [html] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. //定义 Point struct Point {  
    2. var x =0.0, y = 0.0  
    3. }  
    4. //定义 Size struct Size {  
    5. var width = 0.0, height = 0.0  
    6. }  
    7. //定义 Rect struct Rect {  
    8. var origin = Point()  
    9. var size = Size()  
    10. var center: Point {  
    11. get {  
    12. let centerX = origin.x+ (size.width / 2)  
    13. let centerY = origin.y + (size.height / 2)  
    14. return Point(x: centerX, y: centerY)  
    15. }  
    16. set(newCenter) {  
    17. origin.x = newCenter.x - (size.width / 2)  
    18. origin.y = newCenter.y - (size.height / 2)   
    19. }  
    20. }  
    21. }  
    22. var square =Rect(origin: Point(x: 0.0, y: 0.0), size: Size( 10.0,height: 10.0))  
    23. let initialSquareCenter =square.center square.center = Point(x: 15.0, y: 15.0) println("square.origin is  now    at  ((square.origin.x),  
    24. (square.origin.y))")  
    25.    

    属性观察者

    为了监听属性的变化,swift 通过了属性观察者。

    • willSet 观察者是在存储之前调用。

    • didSet 新值存储后调用。

    [html] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. class StepCounter {  
    2. var totalSteps: Int = 0{  
    3. willSet(newTotalSteps) {  
    4. println("About    to    set    totalSteps    to  
    5. (newTotalSteps)")  
    6. }  
    7. didSet {  
    8. if totalSteps >oldValue   {  
    9. steps")  
    10. }  
    11. println("Added   (totalSteps  - oldValue)  
    12. }  
    13. let stepCounter = StepCounter()  
    14. stepCounter.totalSteps = 200  
    15. // About to set totalStepsto 200  
    16. // Added200steps stepCounter.totalSteps = 360  
    17. // About to set totalStepsto 360  
    18. // Added160steps stepCounter.totalSteps = 896  
    19. // About to set totalStepsto 896  
    20. // Added536steps  

    静态属性

    静态属性在结构体中使用 static 定义,类中使用 class

    定义。

    [html] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. struct SomeStructure {  
    2. static var storedTypeProperty = "Some value."static var computedTypeProperty: Int{  
    3. // return anInt value here   
    4. }  
    5. }  
    6. class SomeClass {  
    7. class varcomputedTypeProperty: Int {  
    8. // return anInt value here  
    9. }  
    10. }  

    调用的时候可以直接使用类和结构体名调用。 实例:

    [html] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. struct AudioChannel {  
    2. static letthresholdLevel= 10  
    3. static var maxInputLevelForAllChannels= 0 var currentLevel:Int = 0 {  
    4. didSet {  
    5. if               currentLevel                 > AudioChannel.thresholdLevel {  
    6. // cap   the  new   audio   level  to  the threshold level  
    7. currentLevel                             = AudioChannel.thresholdLevel  
    8. if               currentLevel                 > AudioChannel.maxInputLevelForAllChannels {  
    9. // storethis as the new overall maximum input level  
    10. AudioChannel.maxInputLevelForAllChannels          =  
    11. currentLevel  
    12. }  
    13. }  
    14. }  
    15. }  
    16. var leftChannel =AudioChannel()  
    17. var rightChannel =AudioChannel()  
    18. leftChannel.currentLevel = 7println(leftChannel.currentLevel)  
    19. // prints "7"  
    20. println(AudioChannel.maxInputLevelForAllChannels)  

    Swift交流讨论论坛论坛:http://www.cocoagame.net

    欢迎加入Swift技术交流群:362298485

     
  • 相关阅读:
    繁忙的都市 最小生成树 入门题
    洛谷P2801 教主的魔法 分块
    洛谷 P3203 [HNOI2010]弹飞绵羊 分块
    洛谷P2607 [ZJOI2008]骑士 基环树动归
    Hdu 2586 树链剖分求LCA
    洛谷 P3384 【模板】树链剖分
    洛谷P1816 忠诚 分块
    最全前端开发面试问题及答案整理
    CSS垂直居中和水平居中
    实现一个图片懒加载插件有多难?
  • 原文地址:https://www.cnblogs.com/iOS-Blog/p/3815965.html
Copyright © 2011-2022 走看看