New Swift! 2022 - その他。
Unlock existentials for all protocols
selfやassociated typeを持つ"protocol"を型として使うことが可能になりました。
以下は5.7より"any"を付けることで使えるようになりました。
let firstName: any Equatable = "Paul"
let lastName: any Equatable = "Hudson"
違う型に対しても使えます。
let tvShow: [any Equatable] = ["Brooklyn", 99]
データを使う場合は以下のよう場合分けして使うことができます。
for parts in tvShow {
if let item = parts as? String {
print("Found string: \(item)")
} else if let item = parts as? Int {
print("Found integer: \(item)")
}
}
または
if let firstName = firstName as? String, let lastName = lastName as? String {
print(firstName == lastName)
}
として使うことができます。
Lightweight same-type requirements for primary associated types, Constrained Existential Types
"some"を付けるOpaque Typeをうまく使い簡潔に書けるようになったということです。
おまけ。
resultBuilderとは
この機能を一言で説明すると「内部DSLの生成補助ツール」
「内部DSLの生成補助ツール」とは
DSLの仕組みを使っているのがSwiftUI。
この記事が気に入ったらサポートをしてみませんか?