最近在學習swift的過程中,發現很多人都對於swift的閉包有很深的疑惑,今天就以我個人學習swift 1.2版本下的一些經驗進行一些分享,如有錯漏,望大家指出。
ps.《關於swift學習之每日一tip》我這段時間會持續更新,而其中關於swift的內容都是在今年(2014)春節之後,蘋果推出xcode6.3測試版的之後推出的swift 1.2的語法,關於1.2與1.1的語法,我會在明天的內容中進行一下介紹。
首先,給大家寫一段常見的閉包**
demo
上面這個閉包實際上是閉包的乙個**,下面寫出準備好的閉包的內容
func demo(finished:(name: string)->())
執行結果:
小明正在玩命工作中...
大 boss: 完成了嗎?
以上就是乙個最常用的閉包,在這裡,閉包實際上與objective-c中的block定義非常相似,都是先定義出後面準備好的閉包的內容,然後再在我們需要的地方進行閉包的呼叫,即可。
大家理解了閉包的原理之後,我們再來分析這段閉包**。
// 閉包的格式
/***/
大家在初學閉包的時候,可以比照著這個格式來看閉包的呼叫,因為一般在呼叫的時候,閉包會更加的直觀。
不知道通過上面的這些內容,大家對於閉包有沒有乙個初步的認識?
下面介紹一下閉包的一種常見簡化寫法:
實際上,第一次看到尾隨閉包的時候,我並沒有意識到這是乙個閉包,因為他太簡單了,簡單到什麼程度?
demo2
對,你沒看錯,就是這樣。這就是乙個尾隨閉包的呼叫。
實際上,他的完整版應該是這樣的:
demo2
看到這裡,相信聰明的同學已經猜出來了,這個尾隨閉包顧名思義,如果閉包是最後乙個引數,可以進行簡化,當這個閉包裡連引數都沒有的話,我們就可以像上面那樣寫出如此簡單的閉包呼叫。
在這裡我們定義一下這個閉包:
func demo2(completion:()->())
這個閉包就是符合我上面所說的閉包是最後乙個引數,同時閉包裡連引數都沒有。
當然尾隨閉包只需要閉包是最後乙個引數的情況下就可以進行簡寫,這裡就不寫了,因為本人並不推薦那樣的寫法,可讀性太差了!!
最後,我再簡單說一下閉包的返回值:
廢話不多說,上**:
// 閉包的返回值
demo3
在這裡,大家似乎應該都發現了,我在寫**的時候都喜歡先寫呼叫,再寫閉包的內容,這裡當然是為了大家方便理解,拋開語法的束縛,不喜勿噴喲~^_^。
下面是閉包的定義:
func demo3(rowcount:()->int)
這麼簡單的過程,相信小夥伴們應該都不需要我再多廢話了吧,今天就到這裡,明天再見。 Swift學習之每日一tip 6 單例
近日,在翻看以前寫過的一些oc應用的時候,看到了oc的單例,然後暮然想要試著寫一寫swift下的單例,於是,在經過一番波折後,終於將swift下的單例寫了出來。栗子 instancetype sharednetworktools return instance oc下的單例大家都寫的滾瓜爛熟了,那麼...
Swift3之函式(一)
學習步驟 函式概述 常量引數,變數引數,i o 引數 1.函式 常量引數 2.函式 變數引數 swift3.0已廢棄 3.函式 i o 引數 引數個數的從0到多 1.函式 不帶引數 2.函式 帶引數 3.可變引數 返回值個數的從0到多 1.沒有返回值函式 2.乙個返回值 3.多個返回值 元組 一.先...
Spring學習一之IOC工作原理 3
例項3 對例項2進行重構 增加helloworldfactory類 package com.nantian.spring.example3 import com.nantian.spring.example3.filehellostr 注入hellworld和hellostr依賴 author ps...