[iOS基礎(chǔ)]Swift中下劃線 _ 和"#"總結(jié)

在Swift中,下劃線 _ 和"#"有很多妙用,這里將已經(jīng)看到的妙用進(jìn)行總結(jié),希望可以幫助更多學(xué)習(xí)Swift的朋友。

在Swift中下劃線使用總結(jié)

1.格式化數(shù)字字面量
通過使用下劃線可以提高數(shù)字字面量的可讀性,例如:

let paddedDouble = 123.000_001
let oneMillion = 1_000_000

2.忽略元組的元素值
當(dāng)我們使用元組時(shí),如果有的元素不需要使用,這時(shí)可以使用下劃線將相應(yīng)的元素進(jìn)行忽略,例如:

let http404Error = (404, "Not Found")
let (_, errorMessage) = http404Error

代碼中,只關(guān)心http404Error中第二個(gè)元素的值,所以第一個(gè)元素可以使用下劃線進(jìn)行忽略。

3.忽略區(qū)間值

let base = 3
let power = 10
var answer = 1
for _ in 1...power {
  answer *= base
}

有時(shí)候我們并不關(guān)心區(qū)間內(nèi)每一項(xiàng)的值,可以使用下劃線來忽略這些值。

4.忽略外部參數(shù)名
(1)忽略方法的默認(rèn)外部參數(shù)名
在使用方法(類方法或者實(shí)例方法)時(shí),方法的第二個(gè)參數(shù)名及后續(xù)的參數(shù)名,默認(rèn)既是內(nèi)部參數(shù)名,又是外部參數(shù)名,如果不想提供外部參數(shù)名,可以在參數(shù)名前添加下劃線來忽略外部參數(shù)名。

class Counter {
  var count: Int = 0
  func incrementBy(amount: Int, numberOfTimes: Int) {
    count += amount * numberOfTimes
  }
}

在上面的代碼中,方法incrementBy()中的numberOfTimes具有默認(rèn)的外部參數(shù)名:numberOfTimes,如果不想使用外部參數(shù)名可以使用下劃線進(jìn)行忽略,代碼可以寫為(不過為了提高代碼的可讀性,一般不進(jìn)行忽略):

class Counter {
  var count: Int = 0
  func incrementBy(amount: Int, _ numberOfTimes: Int) {
    count += amount * numberOfTimes
  }
}

(2)忽略具有默認(rèn)值的參數(shù)的外部參數(shù)名
當(dāng)函數(shù)(或者方法)的參數(shù)具有默認(rèn)值時(shí),Swift自動(dòng)為該參數(shù)提供與參數(shù)名一致的默認(rèn)外部參數(shù)名,因此在進(jìn)行函數(shù)調(diào)用的時(shí)候,要提供默認(rèn)參數(shù)名,可以使用下劃線進(jìn)行忽略默認(rèn)外部參數(shù)名(但是不推薦忽略外部參數(shù)名,這主要是為了調(diào)用的時(shí)候可以方便地知道每個(gè)參數(shù)的含義)。

func join(s1: String, s2: String, joiner: String = " ") -> String {
    return s1 + joiner + s2
}
// call the function.
join("hello", "world", joiner: "-")

如果不想使用默認(rèn)外部參數(shù)名,可以進(jìn)行如下修改:

func join(s1: String, s2: String, _ joiner: String = " ") -> String {
    return s1 + joiner + s2
}
// call the function.
join("hello", "world", "-")

在Swift中 #使用總結(jié):

1.配置外部參數(shù)名
在函數(shù)(或者方法)的參數(shù)名前添加"#",可以使該參數(shù)擁有相同的本地參數(shù)名和外部參數(shù)名。

注:在方法中,第二個(gè)及后續(xù)的參數(shù),默認(rèn)是具有和內(nèi)部參數(shù)一致的外部參數(shù)名的,只有第一個(gè)參數(shù)沒有,可以使用"#"符號來強(qiáng)制給第一個(gè)參數(shù)添加與本地參數(shù)名一致的外部參數(shù)名,但是不推薦。

(1)函數(shù)

func incrementBy(amount: Int, #numberOfTimes: Int) {
  count += amount * numberOfTimes
}

numberOfTimes的本地參數(shù)名(只能在函數(shù)內(nèi)部使用)和外部參數(shù)名(在調(diào)用函數(shù)的時(shí)候作為標(biāo)簽使用)都是numberOfTimes。

(2)方法

class Counter {
  var count: Int = 0
  func incrementBy(#amount: Int, numberOfTimes: Int) {
    count += amount * numberOfTimes
  }
}

numberOfTimes默認(rèn)具有本地參數(shù)名和外部參數(shù)名,amount沒有外部參數(shù)名,使用"#"為amount強(qiáng)制指定外部參數(shù)名,在調(diào)用該方法的時(shí)候,必須使用外部參數(shù)名,否則會出現(xiàn)編譯錯(cuò)誤,提示缺少參數(shù)標(biāo)簽。

var counter = Counter()
counter.incrementBy(amount: 4, numberOfTimes: 5)
println(counter.count) // the result is 20
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容