zoukankan      html  css  js  c++  java
  • 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( 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



  • 相关阅读:
    抽象类
    继承
    面向对象的静态属性,类方法,静态方法
    查找linux系统下的端口被占用进程的两种方法 【转】
    awk学习
    【转】借助LVS+Keepalived实现负载均衡
    ORA-28001: the password has expired解决方法
    ORACLE的还原表空间UNDO写满磁盘空间,解决该问题的具体步骤
    Oracle控制文件多路复用以及Oracle备份重建控制文件
    RedHat6.1通过配置yum server安装软件包
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6916017.html
Copyright © 2011-2022 走看看