函數(shù)定義
- 格式:func 函數(shù)名稱(chēng)(參數(shù)名:參數(shù)類(lèi)型, 參數(shù)名:參數(shù)類(lèi)型,...) -> 函數(shù)返回值 {函數(shù)實(shí)現(xiàn)部分}
無(wú)參無(wú)返回值
func say()->Void
{
print("Hello")
}
func say1() // 如果沒(méi)有返回值可以省略"->Void"
{
print("Hi")
}
say()
say1()
無(wú)參有返回值
func info() -> String
{
return "name = hjq, age = 28"
}
print(info())
有參無(wú)返回值
func sayWitchName1(name:String, age:Int) -> Void {
print("hello \(name), I'm \(age) years old")
}
sayWitchName1(name: "baobao", age: 20)
有參有返回值
func info(name:String, age:Int) -> String
{
return "name = \(name), age = \(age)"
}
print(info(name: "HaRi", age: 26))
函數(shù)類(lèi)型
- Swift的函數(shù)類(lèi)型是
由函數(shù)的參數(shù)類(lèi)型和返回值類(lèi)型組成
的喳资,類(lèi)似于C語(yǔ)言的指向函數(shù)的指針,類(lèi)似于OC語(yǔ)言的block。 - 可以利用函數(shù)類(lèi)型定義函數(shù)變量和常量
// 這兩個(gè)函數(shù)類(lèi)型為: (Int, Int) -> Int
func sum(a: Int, b: Int) -> Int
{
return a + b
}
func sub(a: Int, b: Int) -> Int
{
return a - b
}
// 可以利用函數(shù)類(lèi)型定義函數(shù)變量和常量
var funcP:(Int, Int) -> Int = sum
//funcP = sub // 賦與同一類(lèi)型都可以
print(funcP(10,20)) //輸出30
funcP = sub
print(funcP(10,20)) //輸出-10
- 函數(shù)類(lèi)型可以作為函數(shù)的參數(shù)
func calFunc(a: Int, b: Int, Option:(Int, Int) -> Int) -> Int
{
return Option(a, b)
}
print(calFunc(a: 10, b: 20, Option: sum)) //輸出30
print(calFunc(a: 10, b: 20, Option: sub)) //輸出-10
- 函數(shù)類(lèi)型可以作為返回值
func max(a: Int, b: Int) -> Int
{
return a > b ? a : b
}
func min(a: Int, b: Int) -> Int
{
return a > b ? b : a
}
func chooseFunc(getMax:Bool) -> (Int, Int) -> Int
{
return getMax ? max : min
}
var funcP2:(Int, Int) -> Int = chooseFunc(getMax: true)
print(funcP2(10, 20)) //輸出20
函數(shù)參數(shù)
- 默認(rèn)參數(shù):在定義函數(shù)的時(shí)候給某個(gè)參數(shù)賦值, 當(dāng)外部調(diào)用沒(méi)有傳遞該參數(shù)時(shí)會(huì)自動(dòng)使用默認(rèn)值
func joinString2(s1:String ,toString s2:String, jioner s3:String = "默認(rèn)值") -> String
{
return s1 + s3 + s2
}
print(joinString2(s1: "hello", toString: "xiaohange")) //輸出:hello默認(rèn)值xiaohange
- 傳遞指針:如果想在函數(shù)中修改外界傳入的參數(shù),需要inout關(guān)鍵字嗤朴,這會(huì)傳入?yún)?shù)本身而不是參數(shù)的值
func swap3(a: inout Int,b: inout Int)
{
let temp = a
a = b
b = temp
}
var x1 = 10
var y1 = 20
print("交換前 x1 = \(x1), y1 = \(y1)")
swap3(a: &x1, b: &y1)
print("交換后 x1 = \(x1), y1 = \(y1)")
/**
輸出結(jié)果:
交換前 x1 = 10, y1 = 20
交換后 x1 = 20, y1 = 10
*/
- 變參函數(shù)(參數(shù)個(gè)數(shù)不確定):只能放到參數(shù)列表的最后一位, 變參必須指定數(shù)據(jù)類(lèi)型, 變參只能是同種類(lèi)型的數(shù)據(jù)
func add2(nums:[Int]) -> Int {
var sum = 0
for num in nums {
sum += num
}
return sum
}
print(add2(nums: [1,2,3])) //輸出6
func add3(nums:Int...) -> Int
{
var sum = 0
for num in nums {
sum += num
}
return sum
}
print(add3(nums: 1,2,3)) //輸出6
函數(shù)參數(shù)前的"_"
- 函數(shù)參數(shù)前的"_"表示調(diào)用時(shí)可忽略該參數(shù)名稱(chēng)惠啄,如下
func someFunction(_ firstParameterName: Int, secondParameterName: Int) {
// 在函數(shù)體內(nèi)场仲,firstParameterName 和 secondParameterName 代表參數(shù)中的第一個(gè)和第二個(gè)參數(shù)值
}
調(diào)用方式:someFunction(1, secondParameterName: 2)