?swift的函數(shù)跟閉包也分為 (無參無返回值孵稽,無參有返回值肛冶,有參無返回值,有參有返回值)四種情況珊肃∠隗希可以上代碼來看一下。
func demo1 ( ) { print ("沒有參數(shù)沒有返回值") }?
func demo2 ( ) ->String { print("沒有參數(shù)有返回值")? return "xixi"}
func demo3 (str1:String,str2:String )->( ) { print("有參數(shù)沒有返回值") }
func demo4 (str1:String,str2:String)->String { print("有參數(shù)有返回值") return "\(str1)\(str2)"}
然后再 viewDidLoad中分別調(diào)用就行了
/* 閉包 */ 閉包相當(dāng)于是 C里面的 block烈和,封裝了一段有特定功能的代碼塊 招刹。閉包的書寫格式為:????? { (輸入?yún)?shù)列表)->返回值類型??? in?? 閉包里面執(zhí)行的代碼塊 }
/* 懶加載 */ 懶加載的書寫格式是特定的:
lazy var 變量名:變量類型 = {? let?? 定義一個(gè)同樣類型的常量并賦值???? return xx }( )
/*繼承窝趣?*/ swift里面 set方法的寫法:
var 變量名:類型哑舒? { didSet{ } }
只要是自定義的函數(shù)就必須機(jī)上 func,系統(tǒng)函數(shù)不用加越锈,且字樣是紅色的??????????????????????????????? 只要是 override修飾的函數(shù),代表這個(gè)函數(shù)繼承自父類???????????????????????????????????????????????????????????????? 必選類型屬性在重寫 init方法時(shí)甘凭,必須在 super.init( )之前進(jìn)行賦值。如果重載了初始化方法钩蚊,并且沒有提供系統(tǒng)默認(rèn)的初始化方法砰逻,外界是無法訪問到系統(tǒng)默認(rèn)的初始化方法泛鸟。??????? 類方法有兩種寫法: class / static 。 前者能夠被子類重載刚操,后者不能。因?yàn)楹笳咝揎椀氖窃陟o態(tài)區(qū)菊霜,只有一份資源能夠使用鉴逞。
/* KVC */? 在字典轉(zhuǎn) model中司训,基本數(shù)據(jù)類型不能為可選類型,會(huì)導(dǎo)致找不到 key而無法賦值壳猜。可以通過給一個(gè)默認(rèn)值的方法解決喘帚。? KVC 是通過字符串間接訪問對象屬性的一種方式
通過上圖有幾個(gè)注意點(diǎn): 1. 字典的創(chuàng)建要明確類型? 2. 基本數(shù)據(jù)類型不為可選類型 3.繼承父類的方法
/* 單例 */ 單例的好處在于很大程度上減少了內(nèi)存的使用盯腌,避免了頻繁的 allocinit腕够? 單例在 swift中有兩種創(chuàng)建方法:
1.? static let shareInstance:Singleton = { let singleton = Singleton( ) ? ? return? singleton }( )? 其中Singleton是繼承自 NSObject的一個(gè)類
2. static let singleton = Singleton( )?????????????????????????????????????????????????????????????????????????????????????????????????? class func shareInstance( )->Singleton {? return singleton }
/* 協(xié)議 */?
首先創(chuàng)建一個(gè)類 這里叫 Women 繼承 NSObject
然后寫一個(gè)協(xié)議??? protocol womenDeleGate{? func makeMoney( ) }???????????????????????????????? protocol 標(biāo)識符如果前面沒有@objc,表示協(xié)議里面的所有方法都必須實(shí)現(xiàn)玫荣。如果協(xié)議里面有一些是選擇實(shí)現(xiàn)的方法大诸,那么在這些方法前面加上 optial,并且在 protocol前面加上@objc修飾符
?class Women:NSObject{ var delegate:womenDelegate? }? // 聲明代理
在 controller中遵守協(xié)議
在 viewdidLoad( )中
創(chuàng)建一個(gè)對象? let women = Women( )? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 設(shè)置代理? ? ? ? ? women.delegate = self? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 控制代理執(zhí)行協(xié)議? women.delegate?.makeMoney( )? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 在? viewdidLoad外實(shí)現(xiàn)協(xié)議方法? ? func? makeMoney( ) { print ("實(shí)現(xiàn)了協(xié)議方法") }? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
??????????????????????????????????????