程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> Swift中的可變參數函數引見

Swift中的可變參數函數引見

編輯:更多關於編程

Swift中的可變參數函數引見。本站提示廣大學習愛好者:(Swift中的可變參數函數引見)文章只能為提供參考,不一定能成為您想要的結果。以下是Swift中的可變參數函數引見正文


可變參數函數指的是可以接收隨意率性多個參數的函數,我們最熟習的能夠就是 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)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved