计算型属性(computed property)swift
var valueT: Double { get {//get方法在读值的时候调用 return NSNumberFormatter(). numberFromString(labelText.text!)!.doubleValue } set {//set方法在赋值的时候调用 labelText.text = “\(newValue)”//newValue即get中return的值 } } Declaration var valueT: Double { get set } Declared In ViewController.swift
闭包(closure): 用来接收参数和返回参数,相似于函数,可是没有函数名闭包
var operators: String = “/“, num1 = 2.0, num2 = 1.0, answer: Double! func operatorOnTheNum(operators: (Double, Double) -> Double ) -> Double { return operators(num1, num2) } switch operators { case "+": answer = operatorOnTheNum {$0 + $1}//opaeratorOnTheNum({(opt1: Double,opt2: Double) -> Double in return opt1 + opt2 })的极简形式 case "-": answer = operatorOnTheNum {$0 - $1} case "*": answer = operatorOnTheNum {$0 * $1} case "/": answer = operatorOnTheNum {$0 / $1} default: break }
mutating:在结构体和枚举这两种类型中,实例方法只有经过mutating才能够属性的。函数
protocol Togglable { mutating func toogle() } enumeration OnOffSwitch: Togglable { case Off, On mutating func toogle() { switch self { case On: self = On case Off: self = Off } }
@auto_closurecode
func simpleAssert(x: Bool) { let a = 0 if a & x { …… } else { …… } } simpleAssert(someExpensiveComputation() !=42) **当咱们经过上述代码调用simpleAssert函数是,咱们不得不每次都须要调用someExpensiveComputation ()!=42的值是真是假,那么怎么样能作到延迟求值。** func simpleAssert(condition: () ->Bool, y: Bool, message: String) { if (y && !condition()) {//当为False时,那么整个式子的式子的值也为False那么在这种状况下是不会调用condition的 println(message) } else { println("!= 42") } } func someExpensiveComputation() -> Int { return 41 } simpleAssert(false, {someExpensiveComputation() != 42},"==42")