Swift 初心者です。Kotlin からきました。
Apple 公式サンプルコードを3日間 ROM ってました。
👉 sample-backyard-birds/Multiplatform/Birds/BirdsSearchResults.swift at main · apple/sample-backyard-birds
どうも納得ができないので書き換えてみました。
動かしてみると3つとも特に問題ないような感じに見えました。
ネットで調べていると、どうもこちらも変化が激しいようで、どの記事を信じたらいいのか分かりません。
コードを見比べながら分からないこと、今後調べたいこと、を洗い出してみます。
😩 init()
ここで必要なのですか。なくても引数は同じ。
init(searchText: Binding<String>, @ViewBuilder content: @escaping (Bird) -> Content) {
パフォーマンス的な何か、なのでしょうか。
😩 KeyPath
_birds = Query(sort: \.creationDate)
すべて、Xcode 任せなのですが、省略できないんです。Bird が。
「Path」というぐらいなのでどこかに通せばいいと思っているのですが。
😩 Property Wrapper
いきなりでてくる _(アンダースコア)付きのこれ ROM 勢としては驚きました。
どこにもないのにいきなり登場してくる。
どこかに何か隠れてますか。
struct BirdsSearchResults<Content: View>: View {
@Binding var searchText: String
init(searchText: Binding<String>, ...) {
_searchText = searchText
以下すべて挙動が同じに見えます。
struct BirdsSearchResults<Content: View>: View {
@Binding var searchText: String
struct BirdsSearchResults<Content: View>: View {
private var searchText: String
init(searchText: Binding<String>, ...) {
self.searchText = searchText.wrappedValue
struct BirdsSearchResults<Content: View>: View {
private var searchText: Binding<String>
init(searchText: Binding<String>, ...) {
self.searchText = searchText
var body: some View {
let searchText = self.searchText.wrappedValue
ここの部分。
_searchText = searchText
_birds = Query(sort: \.creationDate)
以下記事で勉強したのですが。
👉 SwiftUI Property WrappersクラスのwrappedValue・projectedValue一覧表 #Swift - Qiita
隠しているものを丸出しに露出させることなどできるのでしょうか。
😩 $0
この記述よく見かけます。
birds.filter {
$0.speciesName.contains(
分かりづらい感じがしますが、なぜ具体的なものに置き換えないのでしょうか。
Kotlin でも同様な記述があり、よく怒られていました。
😩 まとめ
対象の Apple サンプルコードは WWDC2023 のものなので約1年前ぐらいで、そんなに古くはないと思っています。
どうかどうかよろしくおねがいします。