不知道不觉, 我们的Swift基础语法已经说了四分之一了, 下面让我们继续来看看:
1.定义和调用函数
在我们的Swift中, 也有定义函数和调用函数的方法, 和OC中的形式不太一样, 但本质都是相同的, 下面让我们来看看例子:
func sayHello(personName: String) -> String {
let greeting = "Hello, " + personName + "!"
return greeting
}
var a = sayHello("xiaoming")
println(a)
// 打印出来的结果: Hello, xiaoming!
PS: 在例子中的func关键字是声明函数必须得加上的, sayHello是函数名, (personName: String)说明函数里有一个参数名叫做personName, 它的类型是String类型, ->String的意思是指该函数返回的类型是一个String类型, 而声明的变量 a 就是用来调用sayHello该方法的, 而括号里所传入的就是该函数的参数内容.
2.多输入形参
在Swift中定义的函数同样是支持多形参输入, 比如:
func halfOpenRangeLength(start: Int, end: Int) -> Int {
return end - start
}
println(halfOpenRangeLength(1, 10))
// 打印出来的结果: 9
PS: 在这个函数里, 有两个形参, 分别都是Int类型.
3.无形参数
同样的, 和OC一样, Swift也允许函数没有形参, 比如:
func sayHelloWorld() -> String {
return "hello, world"
}
println(sayHelloWorld())
// 打印出来的结果: hello, world
4.无返回值函数
在Swift中, 和OC一样, 同样允许函数没有返回值, 比如:
func sayGoodbye(personName: String) {
println("Goodbye, (personName)!")
}
sayGoodbye("Dave")
// 打印出来的结果: Goodbye, Dave
5.多返回值函数
在Swift中, 我们可以声明多个类型的返回值, 元组就是一个最好的例子了, 比如:
func count(string: String) -> (vowels: Int, consonants: Int, others: Int) {
var vowels = 0, consonants = 0, others = 0
for character in string {
switch String(character).lowercaseString {
case "a", "e", "i", "o", "u":
++vowels
case "b", "c", "d", "f", "g", "h", "j", "k", "l", "m","n", "p", "q", "r", "s", "t", "v", "w", "x", "y", "z":
++consonants
default:
++others
}
}
return (vowels, consonants, others)
}
let total = count("some arbitrary string!")
println("(total.vowels) vowels and (total.consonants) consonants, others is (total.others).")
// 打印出来的结果: 6 vowels and 13 consonants, others is 3.
6.函数形参名
在OC或者Swift中, 我们都会给形参设定一个形参名, 比如:
func someFunction(parameterName: Int) {
}
PS: 形参名为someFunction.
7.外部形参名
除了这种方法定义形参名之外, 还有另一种方式, 就是外部形参名:
func someFunction(externalParameterName localParameterName: Int) {
println(localParameterName)
}
var a: () = someFunction(externalParameterName: 10)
// 打印出来的结果: 10
PS: 这个就和我们在OC中定义的形参类似, 但书写格式必须得以空格隔开, “( 空格 )”.
8.外部参数名称速记
外部参数名称还有另一种快速记住的方法, 那就是在每个外部参数名称前加个 “( # )” 号, 比如:
func containsCharacter(#string: String, #characterToFind: Character) -> Bool {
for character in string {
if character == characterToFind {
return true
}
}
return false
}
var a = containsCharacter(string: "abcdefg", characterToFind: "a")
println(a)
// 打印出来的结果: true
这样子我们就不需要写两个形参名, 可以提高我们开发效率.
9.默认形参值
func join(string s1: String, toString s2: String, withJoiner joiner: String = " ") -> String {
return s1 + joiner + s2
}
var a = join(string: "Hello", toString: "World", withJoiner: " - ")
println(a)
// 打印出来的结果: Hello - World
PS: 这是我们自己设定的withJoiner函数内容, 所以使得两个字符串的拼接中间会有 “( -) ” 该符号, 但如果我们不设定的话, 就会默认我们声明时用的 “( 空格 )”.
比如:
func join(string s1: String, toString s2: String, withJoiner joiner: String = " ") -> String {
return s1 + joiner + s2
}
var a = join(string: "Hello", toString: "World")
println(a)
// 打印出来的结果:Hello World
10.有默认值的外部形参名
还有一个例子, 就是有默认值的外部形参名, 下面是我们定义的:
func join(s1: String, s2: String, joiner: String = " ") -> String {
return s1 + joiner + s2
}
var a = join("Hello", "World", joiner: " - ")
println(a)
// 打印出来的结果: Hello - World
下面是默认的:
func join(s1: String, s2: String, joiner: String = " ") -> String {
return s1 + joiner + s2
}
var a = join("Hello", "World")
println(a)
// 打印出来的结果: Hello World
和我们前面讲解外部形参类似, 只是添加了一个默认返回值是 “( 空格 )”的参数.
好了, 这次我们就讲到这里, 下次我们继续~~~