From e1af56a683dcbe10a8626c1e87981ff461762296 Mon Sep 17 00:00:00 2001 From: elmetal Date: Mon, 17 Mar 2025 15:42:44 +0900 Subject: [PATCH 1/2] init file --- .../Articles/ProvideModifierWithParameter.md | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 Guide.docc/Articles/ProvideModifierWithParameter.md diff --git a/Guide.docc/Articles/ProvideModifierWithParameter.md b/Guide.docc/Articles/ProvideModifierWithParameter.md new file mode 100644 index 0000000..056016e --- /dev/null +++ b/Guide.docc/Articles/ProvideModifierWithParameter.md @@ -0,0 +1,34 @@ +# 引数を持つmodifierを提供する + +引数内で状態の条件分岐を記述できるよう、引数を持つmodifierを提供します。 + +## Overview + +SwiftUIでは、条件に応じてViewの見た目や振る舞いを変更することがよくあります。引数のないmodifierを使用する場合、利用側は`if`文による条件分岐を使用するしかありませんが、これはView identityが変更され、パフォーマンスの低下を招きます。 + +引数を持つmodifierを提供することで、利用側はmodifierの引数の中で条件分岐を記述でき、View identityを保持したままmodifierを条件によって変更できます。 + +### 引数のないmodifierの問題点 + +引数のないmodifierを条件分岐によって切り替えるには、`if`文を使用する必要があります: + +```swift + +struct ContentView: View { + @State var condition = false + + var body: some View { + xxx + } +} +``` + +この実装では、`condition`の値が変わるたびに、`Text`がView identityの異なるViewに再構築されます。これにより、状態変更のたびに完全な再構築が必要となり、パフォーマンスが低下します。 + +### 条件分岐をmodifierの引数に移動する + +引数を持つmodifierを提供すると、条件分岐を引数に移動することで同一のView identityで表現できます: + +```swift +xxx +``` From e638af2308dff53df5efa5d27864fe5d4fa35f00 Mon Sep 17 00:00:00 2001 From: elmetal Date: Mon, 17 Mar 2025 15:57:51 +0900 Subject: [PATCH 2/2] add link to root --- Guide.docc/SwiftUIViewCodingGuidelines.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Guide.docc/SwiftUIViewCodingGuidelines.md b/Guide.docc/SwiftUIViewCodingGuidelines.md index f03d3b7..b1d0b73 100644 --- a/Guide.docc/SwiftUIViewCodingGuidelines.md +++ b/Guide.docc/SwiftUIViewCodingGuidelines.md @@ -45,6 +45,7 @@ ### The Art of API Design - +- ### Key priciples of the User Interface -