程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> Swift心得筆記之運算符

Swift心得筆記之運算符

編輯:更多關於編程

Swift心得筆記之運算符。本站提示廣大學習愛好者:(Swift心得筆記之運算符)文章只能為提供參考,不一定能成為您想要的結果。以下是Swift心得筆記之運算符正文


空值歸並運算符和區間運算符

明天重要看的內容是 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 必定要有做備胎的資歷。

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


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...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> 的構造體,可以用來遍歷 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.startIndex
let end = find(name, " ")

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

以上所述就是本文的全體內容了,願望年夜家可以或許愛好。

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