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を読んだので不明点をまとめる