//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);