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

Swift心得筆記之運算符

 更新時間:2015年04月22日 10:44:34   投稿:hebedich  
區(qū)別于 C 語言,在 Swift 中你可以對浮點數(shù)進行取余運算(%),Swift 還提供了 C 語言沒有的表達兩數(shù)之間的值的區(qū)間運算符,(a..b和a...b),這方便我們表達一個區(qū)間內(nèi)的數(shù)值。

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

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

Nil Coalescing Operator

a ?? b 中的 ?? 就是是空值合并運算符,會對 a 進行判斷,如果不為 nil 則解包,否則就返回 b 。

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

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

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

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

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

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

當然你也可以通過自定義運算符來實現(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# 中也有個 ?? ,感興趣的可以去了解一下。

Range Operator

區(qū)間運算符分為閉區(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ū)間運算符其實返回的是一個 Range<T> 對象,是一個連續(xù)無關(guān)聯(lián)序列索引的集合。

話說以前左閉右開是 .. ,這樣和 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...4
var generator = range.generate()  // {startIndex 1, endIndex 5}
generator.next() // 1
generator.next() // 2
generator.next() // 3
generator.next() // 4
generator.next() // nil

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

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

區(qū)間運算符返回的是一個 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.startIndex
let end = find(name, " ")

if (end != nil) {
  let firstName = name[start..<end!]
} else {
  // no space found
}

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

相關(guān)文章

  • 在Swift中使用Cocoa的現(xiàn)有設(shè)計模式介紹

    在Swift中使用Cocoa的現(xiàn)有設(shè)計模式介紹

    這篇文章主要介紹了在Swift中使用Cocoa的現(xiàn)有設(shè)計模式介紹,Cocoa是蘋果公司為Mac OS X所創(chuàng)建的原生面向?qū)ο蟮腁PI,是Mac OS X上五大API之一,需要的朋友可以參考下
    2014-07-07
  • Swift 3.0將UILabel數(shù)字顏色設(shè)置為紅色的方法

    Swift 3.0將UILabel數(shù)字顏色設(shè)置為紅色的方法

    這篇文章主要介紹了關(guān)于在Swift中將UILabel數(shù)字顏色設(shè)置為紅色的方法,文中給出了詳細的示例代碼,相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-03-03
  • Swift語言中字符串相關(guān)的基本概念解析

    Swift語言中字符串相關(guān)的基本概念解析

    這篇文章主要介紹了Swift語言中字符串相關(guān)的基本概念解析,是Swift入門學習中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-11-11
  • Swift?中的?Actors?使用及如何防止數(shù)據(jù)競爭問題(示例詳解)

    Swift?中的?Actors?使用及如何防止數(shù)據(jù)競爭問題(示例詳解)

    Swift中的Actors旨在完全解決數(shù)據(jù)競爭問題,但重要的是要明白,很可能還是會遇到數(shù)據(jù)競爭,本文將介紹Actors是如何工作的,以及你如何在你的項目中使用它們,感興趣的朋友跟隨小編一起看看吧
    2023-06-06
  • Swift如何使用類型擦除及自定義詳解

    Swift如何使用類型擦除及自定義詳解

    有很多地方會用到類型擦除,并且它們的作用的各不相同。下面這篇文章主要給大家介紹了關(guān)于Swift如何使用類型擦除及自定義的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2018-10-10
  • 在?Swift?中編寫Git?Hooks腳本的方法

    在?Swift?中編寫Git?Hooks腳本的方法

    在本例中,我使用了?commit-msg?鉤子,它能夠在當前提交信息生效前修改此信息,鉤子由一個參數(shù)調(diào)用,該參數(shù)是指向包含用戶輸入的提交消息的文件的路徑,這意味著,為了改變提交消息,我們只需要從文件中讀取、修改其內(nèi)容,然后寫回調(diào)用掛鉤的文件
    2022-06-06
  • swift實現(xiàn)顏色漸變以及轉(zhuǎn)換動畫

    swift實現(xiàn)顏色漸變以及轉(zhuǎn)換動畫

    這篇文章主要為大家詳細介紹了swift實現(xiàn)顏色漸變以及轉(zhuǎn)換動畫,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Swift數(shù)組詳細用法解析

    Swift數(shù)組詳細用法解析

    這篇文章主要為大家詳細介紹了Swift數(shù)組詳細用法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Swift中閉包實戰(zhàn)案例詳解

    Swift中閉包實戰(zhàn)案例詳解

    接觸過Swift的小伙伴對“閉包”應(yīng)該不陌生,相當于OC中的Block,是Swift語法中比較難理解的一塊。下面這篇文章主要介紹了關(guān)于Swift中閉包實戰(zhàn)的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-03-03
  • Swift使用CoreData時遇到的一些填坑記錄

    Swift使用CoreData時遇到的一些填坑記錄

    這篇文章主要給大家記錄了在Swift使用CoreData時遇到的一些坑,以及介紹了CoreData在Swift 3.0中的一點改變,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-12-12

最新評論

南投市| 三明市| 内江市| 松阳县| 黎川县| 高要市| 仙游县| 洛南县| 平陆县| 庆元县| 新绛县| 云浮市| 宿州市| 汶上县| 陵川县| 华阴市| 永寿县| 丰顺县| 高尔夫| 麻城市| 商都县| 盐池县| 安乡县| 股票| 咸阳市| 南郑县| 安达市| 察雅县| 黄梅县| 荃湾区| 平原县| 敦化市| 石泉县| 玉屏| 江西省| 宁晋县| 横峰县| 万宁市| 玛曲县| 九台市| 宜丰县|