原文連接正則表達式
普天同慶,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,所以會加入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)
複製代碼
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 {
}
複製代碼
用上面的方法的話,能夠更加的清晰表達條件的意思, 客氣能夠有編譯器幫你檢查。字符串
let times = [
"Hudson": "38",
"Clarke": "42",
"Robinson": "35",
"Hartis": "DNF"
]
let d = times.compactMapValues { Int($0) }
print(d)
複製代碼
這個方法能夠將value爲nil的鍵值去除,並返回一個新的字典。
let scores = [100, 80, 85]
let passCount = scores.count { $0 >= 85 } // 2
複製代碼