Swift学习笔记(二) 函数和闭包

函数和闭包

使用 func 来声明一个函数

func greet(name: String,day:String) -> String{
    return "Hello \(name), today is \(day)."
}
println(greet("Zmsky","HapplyDay”))

使用元祖来返回多个值

func getGasPrices() -> (Double,Double,Double){
    return (3.59,3.69,3.79)
}
getGasPrices()

函数的参数数量是可变的,用一个数组来获取它们:

func avgOf(numbers: Int …) -> Int{
    var sum = 0
    for number in numbers{
        sum+=number
    }
    var avg = sum / numbers.count
    return avg
}

函数可以嵌套函数

func returnFifteen() -> Int{
    var y = 10
    func add(){
        y+=5
    }
    add()
    return y;
}
println(returnFifteen())


函数可以作为另外一个函数的返回值

func makeIncrementer() -> (Int -> Int){
    func addOne(number: Int) -> Int{
        return 1 + number
    }
    return addOne
}
var increment = makeIncrementer()
println(increment(7))

函数也可以作为当做参数传入另一个函数

func hasAnyMatches(list: [Int], condition : Int -> Bool) -> Bool {
    for item in list{
        if condition(item){
            return true;
        }
    }
    return false;
}
func lessThanTen(number:Int) ->Bool{
    return number < 10
}
var numbers = [20,19,7,12]
hasAnyMatches(numbers, lessThanTen)

函数实际上是一种特殊的闭包,可以使用{}赖创建一个匿名闭包。使用in赖分割参数和返回类型。

numbers.map({
    (number:Int) -> Int in
    let result = 3 * number
    return result
})

对象和类

使用class和类名赖创建一个类。类中属性的声明和变量、变量声明一样,唯一的区别就是它们的上下文是类。同样,方法和函数声明也一样。

class Shape{
    var numberOfSides = 0
    func simpleDescription() -> String{
        return "A Shape with \(numberOfSides) sides."
    }
}

var shape = Shape()
shape.numberOfSides = 100
var shapeDescription = shape.simpleDescription()
println(shapeDescription)

构造函数和继承

class NamedShape{
    var numberOfSides : Int = 0
    var name: String
   
    init(name:String){
        self.name = name; //构造函数
    }
    //deinit(){
        //析构函数
    //}
    func simpleDescription() -> String{
        return "A shape with \(numberOfSides) sides."
    }
}

class Square:NamedShape{
    var sideLength:Double
   
    init(sideLength:Double,name:String){
        self.sideLength = sideLength
        super.init(name: name)
        numberOfSides = 4
    }
    func area() -> Double{
        return sideLength * sideLength
    }
   
    override func simpleDescription() -> String {
        return "A square with sides of length \(sideLength)."
    }
}

let test = Square(sideLength: 5.2, name: "my test square")
println(test.area())
println(test.simpleDescription())

属性可以有getter和setter

var perimeter:Double{
get{
    return 3.0 * newValue
}
set{
    sideLength = newValue / 3.0
}
}

 

发布者

Zmsky

http://xloli.net/?page_id=11

发表评论