码迷,mamicode.com
首页 > 编程语言 > 详细

Swift函数

时间:2015-07-07 00:46:30      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

 

1.Swift函数的定义

  func FuncName (形参列表) -> 实参列表 {

  }

  a.无参函数

import Foundation

func SayHi() -> String {
    return "Hi Spursy"
}

var talk = SayHi()
println(talk)

  


import Foundation
func SayHello (name : String) {
    println("Hi " + name)
}

SayHello ("Spursy")

  b.外部参数与内部参数

  func FuncName (OutParaName1 InnerParaName1 : Type1 , OutParaName1 InnerParaName1 : Type1) {

  }

  

  func FuncName (#InnerParaName1 : Type1 ,#InnerParaName1 : Type1) {

  }

   

import Foundation
func area(长 length : Double,宽 width : Double) -> Double
{
    return length * width
}
var scope = area(长: 10, 宽: 20)
println(scope)
import Foundation
func area (#length : Double ,#width : Double) -> Double {
    return length * width
}

var scope = area(length: 10, width: 20)
println(scope)

  c.可变参数

import Foundation


func Sum (numbers : Int ...) -> Int
{
    var total = 0
    for number in numbers {
        total += number
    }
    return total
}

var sum = Sum(3,4,5,6,7,8)
println(sum)

  d. 默认参数

import Foundation

func SayHi (msg : String,name : String = "Spursy"){
    println(msg + name)
}

SayHi("Hi ")
import Foundation

func SayHello (msg : String,name : String = "Spursy"){
    println(msg + name)
}

SayHello("Hello ", name: "Artech")

  e.变量形参

import Foundation

func factory (var number : Int) -> Int {
    var result : Int = 1
    while number > 1 {
        result = result * number
        number--
    }
    return result
}
var result = factory(3)
println(result)

  f.In - Out 参数

    能且仅能传递变量

    形参不能有默认值

    如果有I你Out就不能再有var或是let

func swap (inout a : Int,inout b : Int){
    let tem = a
    a = b
    b = tem
}
var a = 10
var b = 20

swap(&a, &b)
var msg = String("a = \(a), b = \(b)")
println(msg)

2.函数的类型与函数的返回值

  无返回值函数

    func SayHi () {

    }

  有返回值函数

    func area (para1 : Type1, para2 : Type2) -> (Type3) {

    }

  函数的类型

    函数的类型作为常量或者是变量 

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

func multiplyTwoInts (a : Int,b : Int) -> Int {
    return a * b
}

var mathFunction : (Int,Int) -> Int = multiplyTwoInts
var result = mathFunction(3,4)
println(result)

    函数的类型作为参数类型

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

func multiplyTwoInts (a : Int,b : Int) -> Int {
    return a * b
}

func printMathResult (mathFunction : (Int, Int)-> Int,a : Int,b : Int)  {
    var result = mathFunction(a,b)
    println(result)
}
printMathResult(addTwoInts,2,3)

    函数的类型作为返回值的类型

func square(num : Int) -> Int {
    return num * num
}
func circle (num : Int) -> Int {
    return num * 4
}

func GetMathFunc (#type : String) -> (Int) -> Int {
    switch(type){
        case "square":
            return square
        default :
            return circle
    }
}

var pendingFunc = GetMathFunc(type: "other")
println(pendingFunc(5))

    函数的重载

    func test ()

    func test (msg : String)

    func test (msg : String) -> String

    func test  (#msg : String) -> String

    func test    (#msg : String)

3.函数的闭包

    嵌套函数

    

func GetMathFunc (#tyepe : String) -> (Int) -> Int {
    func Area (num : Int) -> Int{
        return num * num
    }
    func Circle (num : Int) -> Int{
        return num * 4
    }
    
    switch ("Area") {
    case "Area":
        return Area
    default :
        return Circle
    }
}

var MathFunc = GetMathFunc(tyepe: "Area")
println("result : \(MathFunc(5))")

    闭包

      {(形参列表) -> 返回值类型 in

        可执行的表达式

      }

   

func GetMathFunc (#tyepe : String) -> (Int) -> Int {
//    func Area (num : Int) -> Int{
//        return num * num
//    }
//    func Circle (num : Int) -> Int{
//        return num * 4
//    }
    
    switch ("Area") {
    case "Area":
        return { (num : Int) -> Int in
            num * num
        }
    default :
        return { (num : Int) -> Int in
            num * 4
        }
    }
}

var MathFunc = GetMathFunc(tyepe: "Area")
println("result : \(MathFunc(5))")

    利用上下文推断类型   

var squre : (Int) -> Int = {
    num in return num * num
}
var result = squre(3)
println(result)

    闭包里只有一行代码时,可用$0,$1,,代替变量

var squre : (Int) -> Int = {
    $0 * $0
}
var result = squre(3)
println(result)

 

---恢复内容结束---

Swift函数

标签:

原文地址:http://www.cnblogs.com/spursy/p/4625669.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!