Swift语言精要 - 属性

1. Stored Property

eg:

var number: Int = 0

 

2. Computed Property

eg:

var area : Double {
  get {
    return width * height
  }

     ...

}

完整代码如下:

class Rectangle {
    var width: Double = 0.0
    var height: Double = 0.0
    var area : Double {
        // computed getter
        get {
            return width * height
        }
        // computed setter
        set {
            // Assume equal dimensions (i.e., a square)
            width = sqrt(newValue)
            height = sqrt(newValue)
        }
    }
}

测试代码:

var rect = Rectangle()
rect.width = 3.0
rect.height = 4.5
rect.area // = 13.5
rect.area = 9 // width & height now both 3.0

 

3. Property Observer(属性观察者)

class PropertyObserverExample {
    var number : Int = 0 {
        willSet(newNumber) {
            println("About to change to \(newNumber)")
        }
        didSet(oldNumber) {
            println("Just changed from \(oldNumber) to \(self.number)!")
        }
    }
}

测试代码如下:

var observer = PropertyObserverExample()
observer.number = 4
// prints "About to change to 4", then "Just changed from 0 to 4!"

 

4. Lazy Property(属性迟绑定)

class SomeExpensiveClass {
    init(id : Int) {
        println("Expensive class \(id) created!")
    }
}

class LazyPropertyExample {
    var expensiveClass1 = SomeExpensiveClass(id: 1)
    lazy var expensiveClass2 = SomeExpensiveClass(id: 2)
    init() {
        println("First class created!")
    }
}

测试代码如下:

var lazyExample = LazyPropertyExample()
// prints "Expensive class 1 created", then "First class created!"
lazyExample.expensiveClass1 // prints nothing, it's already created
lazyExample.expensiveClass2 // prints "Expensive class 2 created!"

 

时间: 2024-10-03 05:54:29

Swift语言精要 - 属性的相关文章

Swift语言精要 - 浅谈结构体(Struct)

CGRect, CGSize, CGPoint这些是 . String, Int, Array, Dictionary这些我们经常用的也是结构体(Struct).   那么结构体(Struct)到底是什么呢? 学过C语言的朋友一定知道它是什么,在这里我就不多说了,你懂的. 我想说的重要的事情是,你必须搞清楚Struct和类的区别,在Swift中这点特别重要.   一下几点区别: 1) 结构体(Struct)不支持继承,而类(Class)则支持. 2) 结构体(Struct)有一个成员初始化器(m

Swift语言精要 - 扩展(Extension)

swift的Extension用户在不访问代码的情况下扩展基本结构类型或自定义类 extension Int { var doubled : Int { return self * 2 } func multiplyWith(anotherNumber: Int) -> Int { return self * anotherNumber } } 测试代码如下: 2.doubled // = 4 4.multiplyWith(32) // = 128   扩展甚至还可以使类型实现某个协议 下面这个

Swift语言精要 - Operator(运算符重载)

运算符重载 Swift的这一语言特性或许应该启发于C++ class Vector2D { var x : Float = 0.0 var y : Float = 0.0 init (x : Float, y: Float) { self.x = x self.y = y } func +(left : Vector2D, right: Vector2D) -> Vector2D { let result = Vector2D(x: left.x + right.x, y: left.y + r

Swift语言精要-闭包(Closure)

闭包(Closure)这个概念如果没学过Swift的人应该也不会陌生. 学过Javascript的朋友应该知道,在Javascript中我们经常会讨论闭包,很多前端工程师的面试题也会问到什么是闭包. 那么,什么是闭包呢? 让我们看下在Javascript中闭包的解释: Closures are functions that have access to variables from another function's scope. (This is often accomplished by

Swift语言精要 - 序列化和反序列化

在swift中你可以把一个对象转换成为数据,你所要做的就是 首先,你需要让对象实现NSObject和NSCoding协议. 其次,实现以下两个方法: encodeWithCoder init(coder aDecoder: NSCoder)  // 一个带NSCoder参数的初始化器 例子代码: class SerializableObject : NSObject, NSCoding { var name : String? func encodeWithCoder(aCoder: NSCod

Swift语言精要 - 浅谈代理模式(Delegate)

在iOS编程中,我们经常谈到代理代理,也就是delegate,那么什么是代理呢? 我们来看一下cocoa对它的描述: Delegation is Cocoa's term for passing off some responsibilities of an object to another 顾名思义: 代理是把职责从一个对象传到另一个对象. 其实,如果编写过Java或者C#程序的朋友应该知道,我们在设计的时候经常使用到接口和组合,道理是一样的. 看一下下面的代码:   首先,我们定义一个协议

Swift语言精要 - Dictionary(字典)

字典以键值对的形式存储数据. 键不能重复,但是值可以重复. 基本语法用例: var states : Dictionary<String, String> = ["CA" : "California"] var states : [String : String] = ["CA" : "California"] 也可以使用类型推断的方式: var states = ["CA" : "C

Swift语言指南(三) Swift语言基础:整数和浮点数

整数 整数指没有小数的整数,如42,-23.整数可以是有符号的(正数,零,负数),也可以是无符号的(正数,零). Swift提供了8,16,32,64位形式的有符号和无符号的整数,这些整数遵循与C语言相似的命名规则.如8位无符号整数的类型为UInt8,32位有符号整数的类型为Int32,和Swift语言的其它类型一样,这些整型命名以大写字母开头. 整数的边界 你可以通过min或max属性为每一个整数类型指定一个最小值或最大值: 1 let 最小值 = UInt8.min // 最小值 等于 0,

iOS开发系列--Swift语言

概述 Swift是苹果2014年推出的全新的编程语言,它继承了C语言.ObjC的特性,且克服了C语言的兼容性问题.Swift发展过程中不仅保留了ObjC很多语法特性,它也借鉴了多种现代化语言的特点,在其中你可以看到C#.Java.Javascript.Python等多种语言的影子.同时在2015年的WWDC上苹果还宣布Swift的新版本Swift2.0,并宣布稍后Swift即将开源,除了支持iOS.OS X之外还将支持linux. 本文将继续iOS开发系列教程,假设读者已经有了其他语言基础(强烈