I. Languageの
5. Flow Control and More
6. Structured Concurrency
で不明点をまとめる
・unwrap
let opt:Int? = 2 if let unwrap = opt { print(unwrap) }
後は、guard let
https://qiita.com/solty_919/items/8b22c8b30cd1a5596c83
・case-let
//optionalも条件にできる let caseOptional: Int? = 5 switch caseOptional { case 1?: print("optional 1") case let n?: print("optional \(n)") case nil: print("nil") } //インスタンスの比較もできる switch d { case let nd as NoisyDog: nd.beQuiet() case let d: d.bark() } //pairで比較もできる let caseOptional2: Int? = 5 let caseOptional3: String? = "masterka" switch(caseOptional2, caseOptional3) { case let(size, desc) as (Int, String) : print("\(size) \(desc)") default: print("default!") break } //enumで比較もできる enum MyError { case number(Int) case other } let err = MyError.number(10) switch err { case .number(let number): print("number \(number)") case .other: print("other") } //enumの値で比較もできる switch err { case let .number(n) where n > 0: print("plus number \(n)") case let .number(n) where n <= 0: print("minus number \(n)") case .other: print("other") default: print("err default") }
・try
func canThrowOrReturnString(shouldThrow: Bool) throws -> String { if (shouldThrow) { throw APIError.network } return "how" } do { let result = try canThrowOrReturnString(shouldThrow: true) print(result) } catch { print (error) } //trueだとクラッシュする。catchしない let result2 = try! canThrowOrReturnString(shouldThrow: false) print(result2) //catchの代わりにelseにする if let result3 = try? canThrowOrReturnString(shouldThrow: true) { print(result3) } else { print("?exception") }
・async-await
func download(url:URL) async throws -> Data { let result = try await URLSession.shared.data(from: url) return result.0 } let url = URL(string: "https://www.yahoo.co.jp")! //async awaitはTaskからしか呼べない Task { do { let data = try await download(url:url) let str: String? = String(data: data, encoding: .utf8) print(str) } catch { print(error) } }
・Actor
Actorはオブジェクトタイプ
バックグラウンドで常に動くならActorに入れるとのこと。
https://qiita.com/h1d3mun3/items/f6ae63368e133e212115
@MainActor
だとメインスレッドになる
Task.detached
でバックグラウンドスレッドになる
関連記事:
- SwiftでEnum + Switch文のやり方
- iOS 15 Programming Fundamentals with SwiftのI-3とI-4を読んだので不明点をまとめる
- iOS 15 Programming Fundamentals with SwiftのI-1とI-2を読んだので不明点をまとめる