最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Swift中的可變參數(shù)函數(shù)介紹

 更新時間:2015年01月09日 12:58:49   投稿:junjie  
這篇文章主要介紹了Swift中的可變參數(shù)函數(shù)介紹,本文實現(xiàn)了和Objective-C調(diào)用方法一樣的變參數(shù)函數(shù),需要的朋友可以參考下

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

復(fù)制代碼 代碼如下:

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

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

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

復(fù)制代碼 代碼如下:

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

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

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

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


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

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

復(fù)制代碼 代碼如下:

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

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

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

相關(guān)文章

  • Swift 常量與變量實例詳解

    Swift 常量與變量實例詳解

    這篇文章主要介紹了Swift 常量與變量實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Swift語言中的函數(shù)學(xué)習(xí)教程

    Swift語言中的函數(shù)學(xué)習(xí)教程

    這篇文章主要介紹了Swift語言中的函數(shù)學(xué)習(xí)教程,著重講了Swift函數(shù)的參數(shù)傳遞用法,需要的朋友可以參考下
    2015-11-11
  • Swift UILable 設(shè)置內(nèi)邊距實例代碼

    Swift UILable 設(shè)置內(nèi)邊距實例代碼

    本文主要介紹Swift UILable 設(shè)置內(nèi)邊距,這里提供示例代碼供大家參考,有需要的小伙伴可以看下
    2016-07-07
  • Spring中BeanFactory與FactoryBean的區(qū)別解讀

    Spring中BeanFactory與FactoryBean的區(qū)別解讀

    這篇文章主要介紹了Spring中BeanFactory與FactoryBean的區(qū)別解讀,Java的BeanFactory是Spring框架中的一個接口,它是用來管理和創(chuàng)建對象的工廠接口,在Spring中,我們可以定義多個BeanFactory來管理不同的組件,需要的朋友可以參考下
    2023-12-12
  • 本地推送通知UserNotifications在Swift中的實現(xiàn)方式

    本地推送通知UserNotifications在Swift中的實現(xiàn)方式

    這篇文章主要介紹了本地推送通知UserNotifications在Swift中的實現(xiàn)方式,想了解消息推送的同學(xué),一定要看一下
    2021-04-04
  • swift學(xué)習(xí)文檔(筆記)

    swift學(xué)習(xí)文檔(筆記)

    這篇文章主要介紹了學(xué)習(xí)swift的筆記,swift最近也比較熱,需要的朋友可以參考下
    2014-09-09
  • Swift 4.2使用self做為變量名淺析

    Swift 4.2使用self做為變量名淺析

    這篇文章主要給大家介紹了關(guān)于Swift 4.2使用self做為變量名的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • 在Swift中如何使用正則表達(dá)式詳解

    在Swift中如何使用正則表達(dá)式詳解

    正則表達(dá)式是對字符串操作的一種邏輯公式,相信大家應(yīng)該都不陌生,下面這篇文章主要給大家介紹了關(guān)于在Swift中如何使用正則表達(dá)式的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-09-09
  • 詳解Swift中的數(shù)據(jù)類型類型轉(zhuǎn)換

    詳解Swift中的數(shù)據(jù)類型類型轉(zhuǎn)換

    Swift中的類型轉(zhuǎn)換可以結(jié)合類的繼承等面向?qū)ο蟮木幊烫匦詠磉M(jìn)行,本文中我們就來詳解Swift中的數(shù)據(jù)類型類型轉(zhuǎn)換,需要的朋友可以參考下
    2016-07-07
  • Swift?Error的處理方法說明

    Swift?Error的處理方法說明

    wift?是一個類型嚴(yán)格的語言,在很多情況下各種不匹配或者強制解包出錯都會導(dǎo)致系統(tǒng)崩潰。所以我們需要進(jìn)行異常處理,在swift中也叫錯誤處理Error
    2022-08-08

最新評論

中江县| 文山县| 城固县| 太谷县| 黎川县| 仁布县| 墨玉县| 青河县| 伊宁市| 康马县| 襄城县| 静乐县| 大渡口区| 五台县| 铜川市| 新余市| 宁都县| 南投县| 久治县| 峨眉山市| 中山市| 乌审旗| 罗平县| 桃源县| 德兴市| 山丹县| 会同县| 通道| 拉萨市| 罗平县| 南汇区| 盐津县| 松江区| 白朗县| 峡江县| 双牌县| 四子王旗| 乌拉特后旗| 肇东市| 沾化县| 宜良县|