The Switf programming Language 練習代碼(7)

//swift

//  main.swift閉包

//  classTest函數

//spa

//  Created by 小強 on 15/12/8.3d

//  Copyright © 2015 小強. All rights reserved.orm

//input


// 函數string


func sayHello(personName: String) -> String {it

    let greeting = "Hello, " + personName + "!";io

    return greeting;

}


print(sayHello("Tom"));


//多輸入形參


func halfOpenRangeLength(start: Int, end: Int) -> Int {

    

    return end - start;

    

}


print(halfOpenRangeLength(1, end: 10));


func join(string s1: String, toString s2: String, withJoiner joiner: String)

    -> String {

        

        return s1 + joiner + s2;

}


print(join(string: "Hello", toString: "world", withJoiner: ","));



// 可變形參


func arithmeticMean(numbers: Double...) -> Double{

    

    var total: Double = 0;

    

    for number in numbers {

        total += number;

    }

    

    return total / Double(numbers.count);

}


print(arithmeticMean(1, 2, 3, 4, 5));


//  常量形參和變量形參


func alignRight(var string: String, count: Int, pad: Character)

-> String

{

    let amountToPad = count - string.characters.count;

    

    for _ in 1...amountToPad {

        string = String(pad) + string;

    }

    

    return string;

}


let originalString = "hello";

let paddedString = alignRight(originalString, count:10, pad:"-");


print(paddedString);


func swapTowInts(inout a: Int, inout b: Int) {

    

    let temporaryA = a;

    a = b;

    b = temporaryA;

    

}


var a = 3, b = 107;

swapTowInts(&a, b: &b);

print("a is now \(a), b is now \(b)");



func addTwoInts(a: Int, b: Int) -> Int {

    return a + b;

}


var addFunction: (Int, Int) -> Int = addTwoInts;


print(addFunction(2, 3));


func printMathResult(mathFunction:(Int, Int)->Int, a: Int, b: Int)

{

    print("Result: \(mathFunction(a, b))");

}


printMathResult(addFunction, a: 3, b: 5);



// 做爲返回類型的函數類型


func isOdd(a: Int) -> Bool {

    

    if a % 2 == 1 {

        return true;

    } else {

        return false;

    }

}



func isEven(a: Int) -> Bool {

    

    if a % 2 == 0 {

        return true;

    } else {

        return false;

    }

}


func evenNum(num: Int) -> (Int) -> Bool {

    

    if num % 2 == 0 {

        return isEven;

    } else {

        return isOdd;

    }

    

}



func stepForward(input: Int) -> Int {

    return input + 1;

}


func stepBackward(input: Int) -> Int {

    

    return input - 1;

}


func chooseStepFuction(backwards: Bool) -> (Int) -> Int {

    

    return backwards ? stepBackward : stepForward;

    

}


// 嵌套函數的實現


func chooseStepFunction(backwards: Bool) -> (Int) -> Int {

    

    func stepForward(input: Int) -> Int {

        return input + 1;

    }

    

    func stepBackward(input: Int) -> Int {

        return input - 1;

    }

    

    return backwards ? stepBackward : stepForward;

}


// 閉包


let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"];


func backwards(s1: String, s2: String) -> Bool {

    

    return s1 > s2;

}


// 閉包


var reversed = names.sort( {(s1: String, s2: String) -> Bool in

    return s1 > s2;});


print(reversed);


// 根據上下文推斷


reversed = names.sort({s1, s2 in return s1 > s2})


print(reversed);


// 單行表達式閉包能夠省略 return


reversed = names.sort( { s1, s2 in s1 > s2} )


print(reversed);


//  參數名簡寫


reversed = names.sort( {$0 > $1} );

print(reversed);


//  運算符函數


reversed = names.sort(>);

print(reversed);


// Trailing 閉包


reversed = names.sort() { $0 > $1};

print(reversed);

相關文章
相關標籤/搜索