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

首頁 > 編程 > Swift > 正文

Swift心得筆記之運(yùn)算符

2020-03-09 17:50:53
字體:
供稿:網(wǎng)友
區(qū)別于 C 語言,在 Swift 中你可以對(duì)浮點(diǎn)數(shù)進(jìn)行取余運(yùn)算(%),Swift 還提供了 C 語言沒有的表達(dá)兩數(shù)之間的值的區(qū)間運(yùn)算符,(a..b和a...b),這方便我們表達(dá)一個(gè)區(qū)間內(nèi)的數(shù)值。
 

空值合并運(yùn)算符和區(qū)間運(yùn)算符

今天主要看的內(nèi)容是 Swift 中的基本運(yùn)算符。記錄一下。

Nil Coalescing Operator

a ?? b 中的 ?? 就是是空值合并運(yùn)算符,會(huì)對(duì) a 進(jìn)行判斷,如果不為 nil 則解包,否則就返回 b 。

var a: String? = "a"var b: String? = "b"var c = a ?? b   // "a"a = nilc = a ?? b     // "b"b = nilc = a ?? b ?? "c"  // "c"

使用的時(shí)候有以下兩點(diǎn)要求:

a 必須是 optional 的
b 必須和 a 類型一致
也就是說,a 一定要有被備胎的可能,b 一定要有做備胎的資格。

其實(shí)也就是對(duì)三目運(yùn)算符的簡(jiǎn)寫:

 

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

a != nil ? a! : b 或者 a == nil ? b : a!

 

當(dāng)然你也可以通過自定義運(yùn)算符來實(shí)現(xiàn):

infix operator ||| {}func |||<T> (left: T?, right: T) -> T {  if let l = left {     return l   }  return right}var a:String?var b = "b"var c = a ||| b

C# 中也有個(gè) ?? ,感興趣的可以去了解一下。

Range Operator

區(qū)間運(yùn)算符分為閉區(qū)間 (...) 和左閉右開區(qū)間 (..<) 兩種,前者是算頭算尾,后者是算頭不算尾。

可以應(yīng)用在 switch 中:

switch aNumber{case 0...5:  println("This number is between 0 and 5")case 6...10:  println("This number is between 6 and 10")default:  println("This number is not between 0 and 10")}

區(qū)間運(yùn)算符其實(shí)返回的是一個(gè) Range<T> 對(duì)象,是一個(gè)連續(xù)無關(guān)聯(lián)序列索引的集合。

話說以前左閉右開是 .. ,這樣和 Ruby 的就剛好完全相反了。。。

不過有人就是想用 .. ,那么可以這樣自己寫一個(gè):

infix operator .. { associativity none precedence 135}func .. (lhs: Int, rhs: Int) -> Range<Int> {  return lhs..<rhs}for i in 0..10 {  println("index /(i)")}

你也可以用 generate() 來遍歷:

var range = 1...4var generator = range.generate()  // {startIndex 1, endIndex 5}generator.next() // 1generator.next() // 2generator.next() // 3generator.next() // 4generator.next() // nil

.generate() 返回一個(gè) RangeGenerator<T> 的結(jié)構(gòu)體,可以用來遍歷 Range<T> 中的值。

以前還有個(gè) (5...1).by(-1) 的用法,不過現(xiàn)在好像沒用了。

區(qū)間運(yùn)算符返回的是一個(gè) ClosedInterval 或者 HalfOpenInterval 的東西,類型只要是 Comparable 就可以了。所以我們也可以把 String 放到 ... 里。

比如貓神的 Swifter Tips 中有一章的代碼如下,通過 String 的 ClosedInterval 來輸出字符串中的小寫字母:

let test = "Hello"let interval = "a"..."z"for c in test {  if interval.contains(String(c)) {    println("/(c)")  }}

SubString

Ruby 中用點(diǎn)點(diǎn)點(diǎn)來獲取 SubString 的方法很方便:

2.1.3 :001 > a="abc" => "abc"2.1.3 :002 > a[0] => "a"2.1.3 :003 > a[0..1] => "ab"

而 Swift 中的 ClosedInterval 是沒有 subscript 的。但是任性的我們就是要用 [1...3] 這種方法怎么辦呢?
自己動(dòng)手豐衣足食,寫個(gè) extension 吧,只需要加個(gè) subscript 就可以了,然后下標(biāo)的類型是 Range<Int> 就可以了:

extension String {  subscript (r: Range<Int>) -> String {    get {      let startIndex = advance(self.startIndex, r.startIndex)      let endIndex = advance(startIndex, r.endIndex - r.startIndex)      return self[Range(start: startIndex, end: endIndex)]    }  }}var s = "Hello, playground"println(s[0...5]) // ==> "Hello,"println(s[0..<5]) // ==> "Hello"

如果要搜索目標(biāo)字符串之后再截取 substring 可以這樣:

let name = "Joris Kluivers"let start = name.startIndexlet end = find(name, " ")if (end != nil) {  let firstName = name[start..<end!]} else {  // no space found}

以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。



注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到swift教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 日日噜噜噜夜夜狠狠久久蜜桃 | 亚洲一区二区三区高清视频 | 亚洲网站免费看 | 久久毛片免费 | 视频一区国产精品 | 综合精品 | asian超清日本肉体pics | 黄色网址在线免费播放 | 九九精品视频观看 | 1级毛片在线观看 | 亚洲国产成人一区 | 欧美高清在线精品一区二区不卡 | 圆产精品久久久久久久久久久 | 92看片淫黄大片欧美看国产片 | 欧美1—12sexvideos | 欧美一级黄色片在线观看 | 亚洲日本韩国精品 | 久久精品综合视频 | 黄色伊人网站 | 国产免费黄色 | 成人在线免费视频观看 | 十级毛片| 免费看成人av | 99极品视频| 男女羞羞在线观看 | 欧洲成人一区 | 欧美成人精品一区二区三区 | 黄色小视频在线免费看 | 国产成人高清成人av片在线看 | 噜噜噜躁狠狠躁狠狠精品视频 | 日韩黄色一级视频 | 91丨九色丨国产在线观看 | 欧美成人一区二区三区 | 男女隐私免费视频 | 一区二区三区在线播放视频 | 久久精品一区二区三区不卡牛牛 | 3级毛片| 国产自在线 | 黄色美女网站免费看 | 香蕉国产在线视频 | 精品久久久久久成人av |