Swift 5.0的新特性

Swift 5.0的新特性

原文連接正則表達式

Result<T, Error>

普天同慶,swift 5.0將Result類型加入了官方庫中。這意味着,咱們將來在寫好比網絡回調,組織數據的時候,能夠這樣:swift

func fetch<T>(result: Result<T, Error>) {
  switch result {
  case .success(let data):
    print("data: \(data)")
  case .failure(let error):
    print("error: \(error)")
  }
}

let result = Result<String, Error>.success("123")
fetch(result: result) // data: 123

// 若是是success的話,能夠經過下面的方式取值:
if let s = try? result.get() {
  print(s) // 123
}

// 經過閉包,構造result:
let result = Result { "123" }
複製代碼

原始字符串

大概就是在先後都加上#符號,能夠被斷定爲是想要表達原始的意思,如:網絡

let rain = #"The "rain" in "Spain" falls mainly on the Spaniards."#
print(rain)
複製代碼

以前的狀況是,雙引號會表示爲字符串結束,可是加了#後,就被認爲,雙引號表示原有的意思,而不是字符串結束的標誌。閉包

這個在正則表達式中,會比較有用,能夠少些一些符號,如:函數

let regex1 = "\\\\[A-Z]+[A-Za-z]+\\.[a-z]+"
複製代碼

能夠寫成:fetch

let regex2 = #"\\[A-Z]+[A-Za-z]+\.[a-z]+"#
複製代碼

處理enum中的case

咱們在枚舉enum的時候,不少時候不會枚舉完全部的case,所以會加入default,可是這樣就會有個問題,就是若是咱們後面新加入一個case的話,忘了給這個case加上處理的方式的話,編譯器也不會報錯,不會給咱們作檢查,所以,swift加入了一個新功能,叫作: @unknown, 它能夠在你新加case的時候提醒你,不要忘了給它加上處理的邏輯:spa

enum PPError: Error {
  case short
  case obvious
  case simple
}

func showOld(error: PPError) {
  switch error {
  case .obvious:
    print("obvious...")
  @unknown default:
    print("default...")
  }
}

showOld(error: .simple)
複製代碼

將用try?嵌套的可選值打平

struct User {
  var id: Int
  
  init?(id: Int) {
    if id < 1 {
      return nil
    }
    
    self.id = id
  }
  
  func getMessages() throws -> String {
    // complicated code here
    return "No messages"
  }
}

let user = User(id: 1)
let messages = try? user?.getMessages()
print("\(messages)")
複製代碼

swift5以前應該輸出的是: String?? 如今就只是: String?code

判斷一個數可否被整除

Swift5.0新增了一個方法,能夠用來判斷:ip

let rowNumber = 4

if rowNumber.isMultiple(of: 2) {
    print("Even")
} else {
    print("Odd")
}

// 以前咱們要這麼寫:

if rowNumber % 2 == 0 {
	
} else {
	
}
複製代碼

用上面的方法的話,能夠更加的清晰表達條件的意思, 客氣能夠有編譯器幫你檢查。字符串

用compactMapValues函數展開字典的值

let times = [
  "Hudson": "38",
  "Clarke": "42",
  "Robinson": "35",
  "Hartis": "DNF"
]

let d = times.compactMapValues { Int($0) }
print(d)
複製代碼

這個方法能夠將value爲nil的鍵值去除,並返回一個新的字典。

用count(where:)函數計算知足某個條件的序列的個數

let scores = [100, 80, 85]
let passCount = scores.count { $0 >= 85 } // 2
複製代碼
相關文章
相關標籤/搜索