很多文章里都提及函數在Swift中一等公民缩擂,你是怎么認為的呢滤港?
我也不太懂廊蜒,淺薄的印象就是函數在Swift中也是一種獨特的類型,和Int 、String ...等等并無不同山叮,想必面向函數編程其實也是基于此八堡,只是函數可以作為參數。
//聲明語法
//永不返回的函數 關鍵字Never
func noReturn() -> Never {
//滄海桑田聘芜,斷電可破兄渺。
}
//無參且無返回值類型 函數
func myFirstFunc() {
print("whatever...")
}
//使用函數
myFirstFunc()
//帶參函數
//這里需要注意下,name 是函數的內部參數名汰现,這里因為沒有指定外部參數名挂谍,所以默認使用內部參數名作為外部參數名。
//第二個參數,因為指定了secondValue作為了外部參數名瞎饲,所以外部在調用該函數時必須要攜帶外部參數名口叙。
func mySecondFunc(name: String, secondValue age: Int) {
print("my name is \(name), age is \(age)")
}
//有返回值函數
func myThirdFunc(_ a: Int, multipy b: Int) -> Int {
return a * b
}
//注意 忽略了第一個參數的外部參數名
myThirdFunc(2, multipy: 2)
//函數的返回值 可以是元組
func myFourFunc () -> (a, b) {
return(2, 4)
}
傳值調用 與 傳址調用
這里來看下Swift下該怎么做
傳值調用(默認行為)copy-in
傳址調用(需要使用關鍵字 inout)copy-in copy-out
Tip:主要是防止意外改變傳遞參數的行為
var number = 5
func myFunc (value num: inout Int) {
value += 2
}
myFunc(value: &number)
print(number) // result : 7
重載 overloading
重載是Swift下的一大利器
func myFunc(parameterA: Int)
func myFunc(parameterA: Int , parameterB: Int)
func myFunc(parameterA: Int , parameterB: Int, parameterC: Int)
//相同返回值的函數,下面的兩個函數重載是合法的
func getValue() -> Int {
return 10
}
func getValue() -> String {
return "Hi"
}
//只不過調用的時候需要注意,可以指定類型來調用。
let intValue: Int = getValue()
let strValue: String = getValue()
函數是一等公民
func myFunc() {
print ("hello , world")
}
var function = myFunc
//調用
function() // hello , world
//將函數作為參數
func show(_ function: () -> (), a: Int) {
function() //執(zhí)行函數
print("value :\(a)")
}