import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
/**
使用元组(tuple)类型组合多个值为一个复合值作为函数的返回值
需要注意的是,在返回值中并不需要对元组成员进行命名,因为它们的名称已经存在了(就是变量名)
*/
func count(word:String)->(aCount:Int,bCount:Int,cCount:Int){
var a = 0,b = 0, c = 0
for cha in word.characters{
switch cha {
case "a":
a++
case "b":
b++
case "c":
c++
default:
continue
}
}
return (a,b,c)
}
let string1 = "Dispose of any resources that can be recreated"
print("\(string1) has \(count(string1).aCount)个a \(count(string1).bCount)个b \(count(string1).cCount)个c")
/**
以上所有的函数都给它们的参数定义了参数名称
这些参数只能在函数体中使用,不能在函数调用时使用。
这种类型的参数被称作局部参数(local parameter name),因为它们只能在函数体中使用
函数调用时,参数名是非常有用的,因为这些参数名说明实参的用途是什么。
如果你希望函数的使用者在调用函数时提供参数名字,
那就需要给每个参数(除了局部参数)外再定义一个外部参数名。
外部参数名写在局部参数名之前,用空格分开
如果函数提供了外部参数名,那么函数在被调用时,必须使用外部参数名
*/
func join(string s1 :String,string s2 :String,withJoinerString joner:String)->String{
return s1 + joner + s2
}
print(join(string: "hello", string: "Sam!", withJoinerString: ","))
func and(firstName name1 :String,secondName name2:String )->String{
return name1 + "and " + name2
}
print(and(firstName: "Jenny ", secondName: "Denny"))
/**
现在,使用这些外部参数名调用函数,这样会更清晰:
如果函数参数的意图不明显,考虑使用外部参数名;否则,就不需要使用外部参数名。
如果需要提供外部参数名,而局部参数名的定义已经非常明确了,那么你不需要写两次这个参数名。
这说明这个参数名既作为局部参数名也作为外部参数名。
*/
func ifcontainsCharacter(string string:String,characterToFind:Character)->Bool{
for cha in string.characters {
if cha == characterToFind {
return true
}
}
return false
}
print(ifcontainsCharacter(string: "dispose", characterToFind: "a"))
func plus(firstValue a:Int,secondValue b:Int)->Int{
return a + b
}
print(plus(firstValue: 3, secondValue: 4))
/**
当我们想定义具有多个数量参数的函数, 那么我们可以声明成员为 “可变参数” 的参数。
参数可以被指定为可变参数由(...)的参数名称之后。
*/
func vari<a>(members:a...){
for i in members {
print(i)
}
}
vari(3,4,7)
vari(2.3,4,1,"asd")
vari("apple","pich","tree")
}
}