麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Swift > 正文

Swift中的可變參數函數介紹

2020-03-09 17:51:39
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了Swift中的可變參數函數介紹,本文實現了和Objective-C調用方法一樣的變參數函數,需要的朋友可以參考下
 

可變參數函數指的是可以接受任意多個參數的函數,我們最熟悉的可能就是 NSString 的 -stringWithFormat:方法了。在 Objective-C 中,我們使用這個方法生成字符串的寫法是這樣的:

復制代碼代碼如下:

NSString *name = @"Tom";
NSDate *date = [NSDate date];
NSString *string = [NSString stringWithFormat:
                @"Hello %@. Date: %@", name, date];

這個方法中的參數是可以任意變化的,參數的第一項是需要格式化的字符串,后面的參數都是向第一個參數中填空。在這里我們不再詳細描述 Objective-C 中可變參數函數的寫法 (畢竟這是一本 Swift 的書),但是我相信絕大多數即使有著幾年 Objective-C 經驗的讀者,也很難在不查閱資料的前提下正確寫出一個接受可變參數的函數。

 

但是這一切在Swift中得到了前所未有的簡化。現在,寫一個可變參數的函數只需要在聲明參數時在類型后面加上 ... 就可以了。比如下面就聲明了一個接受可變參數的 Int 累加函數:

復制代碼代碼如下:

func sum(input: Int...) -> Int {
    //...
}

輸入的 input 在函數體內部將被作為數組 [Int] 來使用,讓我們來完成上面的方法吧。當然你可以用傳統的 for...in 做累加,但是這里我們選擇了一種看起來更 Swift的方式:
復制代碼代碼如下:

func sum(input: Int...) -> Int {
    return input.reduce(0, combine: +)
}

 

println(sum(1,2,3,4,5))
// 輸出:15


在使用可變參數時需要注意的是可變參數只能作為方法中的最后一個參數來使用,而不能先聲明一個可變參數,然后再聲明其他參數。這是很容易理解的,因為編譯器將不知道輸入的參數應該從哪里截斷。另外,在一個方法中,最多只能有一組可變參數。

 

一個比較惱人的限制是可變參數都必須是同一種類型的,當我們想要同時傳入多個類型的參數時就需要做一些變通。比如最開始提到的-stringWithFormat:方法。可變參數列表的第一個元素是等待格式化的字符串,在 Swift 中這會對應一個 String 類型,而剩下的參數應該可以是對應格式化標準的任意類型。一種解決方法是使用 Any 作為參數類型,然后對接收到的數組的首個元素進行特殊處理。不過因為 Swift 提供了使用下劃線 _ 來作為參數的外部標簽,來使調用時不再需要加上參數名字。我們可以利用這個特性,在聲明方法是就指定第一個參數為一個字符串,然后跟一個匿名的參數列表,這樣在寫起來的時候就 "好像" 是所有參數都是在同一個參數列表中進行的處理,會好看很多。比如Swift 的 NSString 格式化的聲明就是這樣處理的:

復制代碼代碼如下:

extension NSString {
    convenience init(format: NSString, _ args: CVarArgType...)
    //...
}

調用的時候就和在 Objective-C 時幾乎一樣了,非常方便:
復制代碼代碼如下:

let name = "Tom"
let date = NSDate()
let string = NSString(format: "Hello %@. Date: %@", name, date)


注:相關教程知識閱讀請移步到swift教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 欧美伦交 | 久久中文一区 | 黄色一级片免费观看 | 一区二区久久久久草草 | 依人在线视频 | 亚洲精品成人久久 | 日韩黄在线 | 亚洲第一页夜 | 亚洲国产二区 | 欧美三级日本三级少妇99 | 香蕉国产在线视频 | 日韩激情一区二区三区 | 欧美视频黄色 | 91色琪琪电影亚洲精品久久 | 欧美成网站 | 亚洲网站在线观看视频 | 毛片一级网站 | 末成年女av片一区二区 | 在线日韩亚洲 | 在线a毛片免费视频观看 | 欧美黄 片免费观看 | 男人天堂新地址 | 国产理论视频在线观看 | 日韩每日更新 | 少妇激情视频 | 亚洲精品久久久久久久久久 | aaaaaaa毛片 | 国产精品久久久久久久四虎电影 | 国产永久免费观看 | 九一成人| 成年人毛片视频 | 亚洲影视在线 | 国产精品免费麻豆入口 | 亚洲精品欧美在线 | 日韩激情 | 91九色免费视频 | 超污视频在线看 | 在线观看国产一区二区三区 | 国产午夜精品一区 | 精品国产一区二区三区久久久蜜月 | 色淫视频 |