不知道不觉,我们的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.多输入形参
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中,同样允许函数没有返回值,比如:
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: "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,"World")
println(a)
// 打印出来的结果: Hello World
和我们前面讲解外部形参类似,只是添加了一个默认返回值是 “( 空格 )”的参数.
好了,这次我们就讲到这里,下次我们继续~~~