問題タブ [property-wrapper]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
582 参照

ios - Swift プロパティ ラッパーの初期化エラー

メールの検証にPropertWrapperを使用しようとしています。しかし、空の文字列で eamilId 変数を初期化しようとすると、エラーが発生します: 呼び出しの引数ラベルが正しくありません (have 'wrappedValue:', expected 'emailId:')

これが私のビューコントローラーのコードです

そして、私のプロパティラッパーのコードは

EmailWrapper を使用しているときに、 ViewController でemailIdをデフォルト値 ( String() ) で初期化するにはどうすればよいですか?

0 投票する
2 に答える
306 参照

binding - SwiftUI ビューを Realm オブジェクトにバインドする予期しない動作

バックエンドに Realm を使用するアプリの UI を開発しました。テキストは、画面を効率的に使用するために「フローティング」ラベルを使用するカスタマイズされた TextField にユーザーが入力します。ラベル アニメーション (非常に単純なロジックに基づく) は、Realm オブジェクトのプロパティとカスタム ビューの間の Binding の状態をチェックすることによってトリガーされます。

ビューのプロトタイプを作成していたときに、構造体に基づく @State または @Binding プロパティを使用したところ、ビューは期待どおりに動作しました。ただし、メイン アプリでこれを使用する場合、@State または @Binding はクラス (レルム オブジェクト) をラップし、遷移はトリガーされません。これは、ビューが内部状態の変更を登録しないため、再生成されないためです。 -色とオフセットを変更してレンダリング。

クラスを操作するときに @ObservableObject を使用する必要があることに気付いたとき、解決策があると思いましたが、これも機能しません。よく考えてみると、これは理にかなっているように思えますが、さまざまなプロパティ ラッパーがどのように機能しているかについて少し混乱しています。

これには回避策があり、最初の呼び出しポートは willChange にフックして必要な状態を変更する可能性が高いと思われます。しかし、それまでの間、私は少しぼんやりしているので、誰かがここで何が起こっているのか説明できますか. たまたま解決策が手元にある場合、これは私が狂った接線に行くのを止めるかもしれませんか?

カスタム ビュー:

機能の実装:

また...

構造体あり

オブジェクトで @State/@Binding を使用する:

オブジェクトの使用

0 投票する
0 に答える
176 参照

swift - Swift @propertyWrapper 'Self' は、プロパティ ラッパー構造体ではなく、囲んでいる構造体/クラスを参照します

Swift で単純なプロパティ ラッパーをコーディングし、プロパティでプロパティ ラッパー構造体/クラスを使用Selfして参照しようとしました。selfReference<T>projectedValue

しかしSelf、 type を参照していないようReference<T>です。たとえば、構造体でそのようなプロパティを宣言してから、次を使用するとしますprojectedValue

変数refの型はTestではなく ですReference<T>。このコードはコンパイルされず、セグメンテーション違反が発生しますが、Xcode はインタラクティブ エラーを返しません。コードを期待どおりに機能させるには、次のように宣言する必要があります。

これは非常に奇妙に感じます。これは意図した動作ですか? Apple のドキュメントを確認しましたが、この動作は文書化されていません。