5

Swift 函数

 3 years ago
source link: http://blog.danthought.com/programming/2016/04/08/swift-functions/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

从这篇文章,你将学习到如何定义和使用 Swift 函数,让我们开始吧。

Swift Functions

定义和使用函数

下面定义名称 greeting 的函数,只有一个 String 类型的 name 参数,函数返回值为 String 类型。

func greeting(name: String) -> String {
  let welcome = "Hello, " + name
  return welcome
}

print(greeting(name: "Jack"))
print(greeting(name: "Lucy"))

函数参数和返回值

没有参数的函数

func greeting() -> String {
  return "Hello World"
}

有多个参数的函数

参数之间用逗号分割。

func greeting(firstName: String, lastName: String) -> String {
  return "Hello, " + firstName + " " + lastName
}

没有返回值的函数

func greeting(firstName: String, lastName: String) {
  print("Hello, " + firstName + " " + lastName)
}

有多个返回值的函数

函数通过返回一个元组来返回多个值。

func greeting(name: String) -> (hello: String, goodbye: String) {
  let hi = "Hello, " + name
  let bye = "Goodbye, " + name
  return (hi, bye)
}

函数参数名称

函数的每一个参数都有外部名称和内部名称,外部名称在调用函数时使用,内部名称在函数内部实现中使用。

函数参数的外部名称和内部名称一致,如下面的示例。

func greeting(firstName: String, lastName: String) {
  print("Hello, " + firstName + " " + lastName)
}

greeting(firstName: "Lincoln", lastName: "Park")

指定外部名称

下面示例中 firstName 和 lastName 是外部名称,first 和 last 是内部名称,调用函数时也要写明外部名称。

func greeting(firstName first: String, lastName last: String) {
  print("Hello, " + first + " " + last)
}

greeting(firstName: "Lincoln", lastName: "Park")

忽略外部名称

用下划线来忽略外部名称。

func greeting(_ firstName: String, _ lastName: String) {
  print("Hello, " + firstName + " " + lastName)
}

greeting("Lincoln", "Park")

默认参数值

函数参数可以指定默认值,在没有传入参数值时,此参数就使用默认值。

func greeting(name: String = "Unkown") {
  print("Hello, " + name)
}

greeting(name: "James")
greeting()

函数接受零到多个参数值。

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

sum(numbers: 2, 3)
sum(numbers: 5, 6, 7)

传入传出参数

func swap(_ a: inout Int, _ b: inout Int) {
  let temporaryA = a
  a = b
  b = temporaryA
}

var someInt = 3
var anotherInt = 10
swap(&someInt, &anotherInt)
print("someInt is now \(someInt), and anotherInt is now \(anotherInt)")

函数类型由参数类型和返回值类型构成,如下示例的函数类型就是 (String, String) -> String

func greeting(firstName: String, lastName: String) -> String {
  return "Hello, " + firstName + " " + lastName
}

使用函数类型

既然是类型,因此也可以像其它类型一样,定义变量和常量,还有赋值。

func hello(name: String) {
  print("Hello, " + name)
}

func goodbye(name: String) {
  print("Goodbye, " + name)
}

var greeting: (String) -> Void = hello

greeting("Jack")

greeting = goodbye

greeting("Jack")

函数类型做为参数

func hello(name: String) -> String {
  return "Hello, " + name
}

func goodbye(name: String) -> String {
  return "Goodbye, " + name
}

func printGreeting(_ greeting: (String) -> String, name: String) {
  print(greeting(name))
}

printGreeting(hello, name: "Jack")
printGreeting(goodbye, name: "Jack")

函数类型做为返回值

func hello(name: String) -> String {
  return "Hello, " + name
}

func goodbye(name: String) -> String {
  return "Goodbye, " + name
}

func greeting(leave: Bool) -> (String) -> String {
  if leave {
    return goodbye
  } else {
    return hello
  }
}

var welcome = greeting(leave: true)

print(welcome("Jack"))

welcome = greeting(leave: false)

print(welcome("Jack"))

上面的示例中定义的函数都是全局函数,也就是任何地方都可以调用,如果想隐藏一些实现的细节,可以使用嵌套函数,当然还可以通过函数返回值将内部函数返回来给外部使用。

func greeting(leave: Bool) -> (String) -> String {
  func hello(name: String) -> String {
    return "Hello, " + name
  }
  
  func goodbye(name: String) -> String {
    return "Goodbye, " + name
  }
  
  if leave {
    return goodbye
  } else {
    return hello
  }
}

var welcome = greeting(leave: true)

print(welcome("Jack"))

welcome = greeting(leave: false)

print(welcome("Jack"))

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK