Swift3.0- 函數(shù)和閉包

函數(shù)的幾種類型

1.無參無返

func great() -> Void {
            
        }
        func great() {
            
        }

2.有參無返

 func includeParameterNoneReturnValue(person: String, day : String) {
            
            print("Hello \(person), today is \(day)")
        }
        
        includeParameterNoneReturnValue(person: "Judy",day: "23")

2.1 省略外部參數(shù)名

        
        func omitOutParameter(_ person : String, _ day : String) -> String {
            
            return "Hello \(person), today is \(day)."
            
        }
        
        print(omitOutParameter("流川楓", "8"))

3.有參有返

        func includeParameterAndReturnValue (_ person : String, _ day : String) -> String {
            return "Houston player \(person) join at \(day)"
        }
        
        print(includeParameterAndReturnValue("周琦", "9"))

4.無參有返

func NoneParameterReturnValue () -> String {
            return "I hate bitch!"
        }

參數(shù)和返回值

1.參數(shù)可以是那些兴垦?

基本類型的值,對象,數(shù)組,字典,元組,可變數(shù)量的參數(shù),函數(shù),閉包函數(shù),協(xié)議,結(jié)構(gòu)體,枚舉值

2.怎么定義參數(shù)

//a.單值
        
        func calculate(a:Int) {
            let b = a
        }
        
        //b. 多值
        func calculates(a: Int...) {
            for _ in a {
                
            }
        }
        
        //c. 元祖
        func calculatess(a:(name:String, age:Int)){
            let name = a.name
            let age = a.age
        }
        
        //d. 數(shù)組
        func calculate_s(a:[String]){
            
            for student in a {
                
            }
        }
        
        //e. 字典
        
        func calculate_d (a:[String:Int]){
            
            for student in a {
                print(student.key)
                print(student.value)
            }
            
        }
        
        //f. 函數(shù)作為參數(shù)
        
        func add(a:Int,b:Int) -> Int {//作為函數(shù)參數(shù)的函數(shù)
            return a + b
        }
        
        func calculate_fa(asd:(Int,Int) -> Int) {//定義的參數(shù)為函數(shù)的函數(shù)
           print( asd(3,5))
        }
        
        calculate_fa(asd: add(a:b:))
        
        //g. 閉包寫法
        
        calculate_fa { (a, b) -> Int in
            
            return a + b
        }
        
        calculate_fa{ (a, b) in a + b }//省略寫法(由于swift有推斷能力勉抓,這樣寫就能夠幫你推斷出上面的寫法)

        //h. 參數(shù)為協(xié)議的方法
//        protocol Player{  // 定義協(xié)議
//            func play()
//        }
//        
//        func playMusicWithPlayer(player:Player){
//            player.play()
//        }
        
        //i. 參數(shù)為結(jié)構(gòu)體
        
//        struct Student{
//            var name:String
//            var age:Int
//        };
//        
//        func getStudentDescription(student:Student){
//            print(student.name)
//            print(student.age)
//        }
        
        //j.  參數(shù)為枚舉類型
        
        // 定義枚舉值
        enum CarType:String{
            case Lincoln = "林肯"
            case MERCURY = "水星"
            case SUZUKI = "鈴木"
        }
        // 參數(shù)為協(xié)議的方法
        func describeCar(carType:CarType){
            print(carType.rawValue);
        }

函數(shù)內(nèi)部定義函數(shù)

        func getValueByFlag(flag:Bool) -> (Int, Int) -> Int {
            
            func add_f(a:Int, b:Int) -> Int {
                return a + b
            }
            
            func descrase(a:Int,b:Int) -> Int {
                return a - b
            }
            
            if flag {
                return add
            } else {
                return descrase
            }
        }
        
        let addFunc = getValueByFlag(flag: false)
        
        print(addFunc(2,4))

設(shè)置默認參數(shù)值

        func addStudent(student:(name:String, nunbers:Double)=("姓名",23554411)){
            print(student.name)
            print(student.nunbers)
        }
        
        addStudent()
        addStudent(student: ("元昊",111307302))

inout的使用

需求: 創(chuàng)建一個函數(shù),交換兩個Int類型值

a.如果參數(shù)為let修飾的常量

func swapTwoInts( a:  Int, b: Int){
let temporaryA = a
a = b
b = temporaryA
}

報錯:系統(tǒng)提示錯誤,說常量不能修改值

b.我們將參數(shù)變成變量var

func swapTwoInts( var a:  Int, var b: Int){
let temporaryA = a
a = b
b = temporaryA
}

報錯,不能使用var 修飾參數(shù)

c.inout 修飾的參數(shù)可以修改值

func swapTwoInts(  a: inout Int, b:inout Int){
    let temporaryA = a
    a = b
    b = temporaryA
}
var a = 30
var b = 40
swapTwoInts(a: &a, b: &b)
print(a)
print(b)


40
30

Warning:

1.inout的位置 在: 后面,數(shù)據(jù)類型前面
2.inout 修飾的參數(shù)不能有默認值
3.inout 不能用于修飾多值(如a:Int...)

others:函數(shù)類型的變量不能用標簽修飾參數(shù)

// 錯誤的寫法  不能使用a,b標簽
var swap1:( a :inout Int, b: inout Int)->Void = swapTwoInts
// 你應該像下面這樣
var swap1:( _ :inout Int, _: inout Int)->Void = swapTwoInts
// 或者下面這樣也可以,a,b 不一定要和實際函數(shù)對應
var swap1:( _ a:inout Int, _ b: inout Int)->Void = swapTwoInts
// 建議還是用下面這種
var swap1:( inout Int, inout Int)->Void = swapTwoInts

定義閉包類型數(shù)據(jù)

        var customersInLine = ["Chirs","Alex","Ewa"]
        let customerprovider = { customersInLine.remove(at: 0)}
        print(customersInLine.count)
        print("Now Serving \(customerprovider())!")
        print(customersInLine.count)

提示:上面那種閉包其實是無參有返的閉包形式,原形如下

let customerProvider:()->String= { customersInLine.remove(at: 0)}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖奶栖,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異门坷,居然都是意外死亡宣鄙,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門默蚌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來冻晤,“玉大人,你說我怎么就攤上這事绸吸”腔。” “怎么了设江?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長攘轩。 經(jīng)常有香客問我叉存,道長,這世上最難降的妖魔是什么度帮? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任鹉胖,我火速辦了婚禮,結(jié)果婚禮上够傍,老公的妹妹穿的比我還像新娘。我一直安慰自己挠铲,他們只是感情好冕屯,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拂苹,像睡著了一般安聘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瓢棒,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天浴韭,我揣著相機與錄音,去河邊找鬼脯宿。 笑死念颈,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的连霉。 我是一名探鬼主播榴芳,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼跺撼!你這毒婦竟也來了窟感?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤歉井,失蹤者是張志新(化名)和其女友劉穎柿祈,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哩至,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡躏嚎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了憨募。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片紧索。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖菜谣,靈堂內(nèi)的尸體忽然破棺而出珠漂,到底是詐尸還是另有隱情晚缩,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布媳危,位于F島的核電站荞彼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏待笑。R本人自食惡果不足惜鸣皂,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望暮蹂。 院中可真熱鬧寞缝,春花似錦、人聲如沸仰泻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽集侯。三九已至被啼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間棠枉,已是汗流浹背浓体。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留辈讶,地道東北人命浴。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像荞估,于是被迫代替她去往敵國和親咳促。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Swift3.0 - 真的很簡單Swift3.0 - 數(shù)據(jù)類型Swift3.0 - ArraySwift3.0 -...
    酷走天涯閱讀 3,856評論 2 8
  • 使用func 聲明一個函數(shù)勘伺。通過函數(shù)名稱和參數(shù)調(diào)用一個函數(shù)跪腹。使用->區(qū)分參數(shù)名和函數(shù)返回的類型。 函數(shù)的參數(shù)可以有...
    民謠程序員閱讀 5,108評論 2 9
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 3,783評論 1 10
  • 今天的博客算是比較基礎(chǔ)的飞醉,還是那句話冲茸,基礎(chǔ)這東西在什么時候都是最重要的。說到函數(shù)缅帘,只要是寫過程序就肯定知道函數(shù)是怎...
    攞你命3OOO閱讀 568評論 0 1
  • 常量與變量使用let來聲明常量轴术,使用var來聲明變量。聲明的同時賦值的話钦无,編譯器會自動推斷類型逗栽。值永遠不會被隱式轉(zhuǎn)...
    莫_名閱讀 439評論 0 1