(girls:Int, boys:Int) 該函數(shù)的類(lèi)型是 (Dictionary..."/>
您好,登錄后才能下訂單哦!
函數(shù)的類(lèi)型
函數(shù)具有類(lèi)型的,如:
func count(kids: Dictionary<String, String>) -> (girls:Int, boys:Int)
該函數(shù)的類(lèi)型是 (Dictionary<String,String>)->(Int, Int)
函數(shù)是引用類(lèi)型,即賦值操作時(shí)不是把值的副本賦值,而是讓常量或變量指向它(這個(gè)函數(shù))
定義函數(shù)常量,如:
let f1:(Dictionary<String,String>)->(Int,Int) = count
var (g, b) = f1(k)
print("girls=\(g) boys=\(b)")
定義函數(shù)變量,如:
var f1:(Dictionary<String,String>)->(Int,Int) = count
var (g, b) = f1(k)
print("girls=\(g) boys=\(b)")
無(wú)論是函數(shù)變量還是函數(shù)常量,都可以用來(lái)調(diào)用所表示函數(shù)
高級(jí)玩法(一):函數(shù)的參數(shù)類(lèi)型為函數(shù)類(lèi)型
如:
func countFacade(countFunc:(Dictionary<String,String>)->(Int, Int), kids:Dictionary<String,String>) ->(Int, Int) {
return countFunc(kids)
}
var k:Dictionary<String, String> = ["AAA":"Girl", "BBB":"Boy", "CCC":"Girl", "DDD":"Girl", "EEE":"Boy"]
var (g,b) = countFacade(count, kids: k)
print("girls:\(g) boys:\(b)")
用途:1)避免使用和閱讀代碼的人關(guān)注到復(fù)雜功能的細(xì)節(jié)
2)當(dāng)函數(shù)的具體實(shí)現(xiàn)需要變化時(shí),可以在函數(shù)類(lèi)型不變的情況下方便修改該
3)對(duì)于集合元素做統(tǒng)一的操作,而由函數(shù)類(lèi)型的參數(shù)決定是何操作
如對(duì)集合中的元素做排序時(shí),可以通過(guò)參數(shù)傳遞函數(shù)指明比較的函數(shù)
高級(jí)玩法(二):函數(shù)的返回值類(lèi)型為函數(shù)類(lèi)型
如:
func drawMoney(cardNumber:String)->Bool {
//取錢(qián)的代碼
return true;
}
func saveMoney(cardNumber:String)->Bool {
//存錢(qián)的代碼
return true;
}
func chooseBakingBusiness(bankBusiness:String) -> (String)->Bool
{
var bbFunc:(String)->Bool = drawMoney;
if bankBusiness == "存錢(qián)" {
bbFunc = saveMoney;
}
else if bankBusiness == "取錢(qián)" {
bbFunc = drawMoney;
}
return bbFunc;
}
let bbf = chooseBakingBusiness("存錢(qián)")
bbf("123456")
嵌套函數(shù)
嵌套函數(shù):
是指在一個(gè)函數(shù)的內(nèi)部,聲明另一個(gè)函數(shù)
這樣做意味著:只能在外部函數(shù)的作用域中調(diào)用內(nèi)部函數(shù)
如:(在chooseBankingBusiness函數(shù)外不能通過(guò)函數(shù)名調(diào)用存取款函數(shù))
func chooseBakingBusiness(bankBusiness:String) -> (String)->Bool {
func drawMoney(cardNumber:String)->Bool {
//取錢(qián)的代碼
return true;
}
func saveMoney(cardNumber:String)->Bool {
//存錢(qián)的代碼
return true;
}
var bbFunc:(String)->Bool = drawMoney;
if bankBusiness == "存錢(qián)" {
bbFunc = saveMoney;
}
else if bankBusiness == "取錢(qián)" {
bbFunc = drawMoney;
}
return bbFunc;
}
let bbf = chooseBakingBusiness("存錢(qián)")
bbf("123456")
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。