亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Swift > 正文

Swift心得筆記之運算符

2020-03-09 17:50:53
字體:
來源:轉載
供稿:網友
區別于 C 語言,在 Swift 中你可以對浮點數進行取余運算(%),Swift 還提供了 C 語言沒有的表達兩數之間的值的區間運算符,(a..b和a...b),這方便我們表達一個區間內的數值。
 

空值合并運算符和區間運算符

今天主要看的內容是 Swift 中的基本運算符。記錄一下。

Nil Coalescing Operator

a ?? b 中的 ?? 就是是空值合并運算符,會對 a 進行判斷,如果不為 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"

使用的時候有以下兩點要求:

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

其實也就是對三目運算符的簡寫:

 

復制代碼代碼如下:

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

 

當然你也可以通過自定義運算符來實現:

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# 中也有個 ?? ,感興趣的可以去了解一下。

Range Operator

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

可以應用在 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")}

區間運算符其實返回的是一個 Range<T> 對象,是一個連續無關聯序列索引的集合。

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

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

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() 返回一個 RangeGenerator<T> 的結構體,可以用來遍歷 Range<T> 中的值。

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

區間運算符返回的是一個 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 中用點點點來獲取 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] 這種方法怎么辦呢?
自己動手豐衣足食,寫個 extension 吧,只需要加個 subscript 就可以了,然后下標的類型是 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"

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

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

以上所述就是本文的全部內容了,希望大家能夠喜歡。



注:相關教程知識閱讀請移步到swift教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国内偷自视频区视频综合| 亚洲成人亚洲激情| 久久色免费在线视频| 国产精品99导航| 欧美一级电影免费在线观看| 久久国产精品久久精品| 91精品久久久久久久久不口人| 国产精品视频xxxx| 国产精品九九九| 精品中文字幕视频| 国产拍精品一二三| 欧美极品xxxx| 91精品在线影院| 国产精品九九久久久久久久| 亚洲欧美日韩一区在线| 国产精品露脸av在线| 亚洲国模精品私拍| 久久这里只有精品99| 亚洲精品国产精品国产自| 色yeye香蕉凹凸一区二区av| 92看片淫黄大片欧美看国产片| 亚洲国产成人精品一区二区| 欧美插天视频在线播放| 国产日韩欧美在线播放| 国内精品免费午夜毛片| 国产日韩精品在线观看| 91在线高清视频| 久久夜色精品国产欧美乱| 日韩久久免费电影| 久久97精品久久久久久久不卡| 国产午夜精品全部视频在线播放| 亚洲国产女人aaa毛片在线| 国产成人aa精品一区在线播放| 成人激情免费在线| 欧美日韩爱爱视频| 国产日韩在线免费| 中文字幕久热精品在线视频| 国产精品视频地址| 欧洲亚洲妇女av| 欧美精品videosex性欧美| 欧美性xxxxxxxxx| 91丨九色丨国产在线| 日韩av网址在线观看| 国产91精品在线播放| 色樱桃影院亚洲精品影院| 超碰91人人草人人干| 久久久女人电视剧免费播放下载| 色综合五月天导航| 国产精品久久久久久久久久| 久久黄色av网站| 97人人做人人爱| 国模私拍一区二区三区| 欧美怡春院一区二区三区| 97热在线精品视频在线观看| 成年无码av片在线| 亚洲第五色综合网| 热久久这里只有精品| 日韩av色综合| 尤物yw午夜国产精品视频明星| 美女啪啪无遮挡免费久久网站| 欧美成aaa人片在线观看蜜臀| 国产在线不卡精品| 国产精品亚洲网站| 欧美一区二区.| 亚洲美女在线观看| 51视频国产精品一区二区| 欧美日韩电影在线观看| 亚洲午夜精品视频| 亚洲精品v天堂中文字幕| 日韩美女av在线| 国产在线精品播放| 日本久久久久久久久久久| 久99九色视频在线观看| 欧美成年人在线观看| 日韩国产欧美精品在线| 欧美又大粗又爽又黄大片视频| 亚洲欧美变态国产另类| 国产精品欧美激情在线播放| 亚洲天堂成人在线| 欧美孕妇孕交黑巨大网站| 欧美伊久线香蕉线新在线| 在线视频欧美性高潮| 在线日韩精品视频| 8x海外华人永久免费日韩内陆视频| 亚州成人av在线| 日韩一区二区三区xxxx| 亚洲一区二区精品| 亚洲一区二区在线播放| 欧美日韩国产精品一区| 亚洲一区二区三区乱码aⅴ| 中文在线资源观看视频网站免费不卡| 午夜精品一区二区三区av| 欧美精品18videosex性欧美| 色综合91久久精品中文字幕| 日韩欧美精品免费在线| 2018国产精品视频| 日本一区二区三区在线播放| 91地址最新发布| 亚洲一区av在线播放| 欧美电影免费看| 日韩免费观看高清| 亚洲国内精品在线| 国产婷婷97碰碰久久人人蜜臀| 国产精品久久久久久久久久久久久| 成人精品在线视频| 欧美黑人视频一区| 久久频这里精品99香蕉| 欧美午夜性色大片在线观看| 欧美在线欧美在线| 中文字幕亚洲无线码在线一区| 2018中文字幕一区二区三区| 欧美精品久久久久| 欧美成人在线免费视频| 在线观看精品自拍私拍| 精品女同一区二区三区在线播放| 国产91ⅴ在线精品免费观看| 国产97色在线|日韩| 欧美黄色片免费观看| 欧美成人午夜视频| 亚洲第一中文字幕在线观看| 欧美xxxx14xxxxx性爽| 一区二区三区美女xx视频| 国产91在线视频| 欧美丰满少妇xxxx| 超薄丝袜一区二区| 亚洲欧美另类人妖| 最近2019年好看中文字幕视频| 亚洲毛片在线观看| 精品国产乱码久久久久久虫虫漫画| 福利视频导航一区| 欧美性xxxxxxxxx| 91久久精品国产| 久久精品视频中文字幕| 国产日韩av在线播放| 久久精品国产亚洲精品2020| 欧美久久精品午夜青青大伊人| 欧美做爰性生交视频| 日韩免费电影在线观看| 国产一区二区三区丝袜| 欧美美女18p| 久久在线视频在线| 国产香蕉一区二区三区在线视频| 2019中文字幕在线观看| 日韩精品高清视频| 精品五月天久久| 久久亚洲综合国产精品99麻豆精品福利| 欧美在线视频观看免费网站| 国产日韩av高清| 91探花福利精品国产自产在线| 欧美性xxxxxxx| 中文字幕亚洲精品| 亚洲精品久久久一区二区三区| 国产亚洲欧美视频| 姬川优奈aav一区二区| 国产精品www网站| 亚洲性视频网站| 亚洲欧美在线磁力| 欧美刺激性大交免费视频| 国产精品成人久久久久| 国产视频精品久久久| 91成人国产在线观看| 91最新国产视频| 久久亚洲精品国产亚洲老地址| 国产欧美日韩中文字幕在线|