rootViewControllerをdismissするとrootViewControllerはいつづけることについてドキュメントは存在しますか？


<https://stackoverflow.com/a/44115223/1979953>

> `self.view.window!.rootViewController?.dismiss(animated: false, completion:
> nil)`
>
> It will dismiss all the presented view controllers and remain root  
>  view controller.

すべてのview controllerをdismissして、root view controllerはいつづけるとありました。

たしかに、試してみるとこの挙動になったのですが、公式の動きなのでしょうか？  
どこかに言及している場所はありますか？

`rootViewController`に限って`dismiss`の動きが特殊（実際に試したところ`rootViewController`に代入されている`ViewController`で`dismiss`しても同じ）なので気になりました。




[`dismiss(animated:completion:)`](https://developer.apple.com/documentation/uikit/uiviewcontroller/1621505-dismiss)の動作を論ずるのであれば、公式ドキュメントの以下の部分を正しく理解しておかないといけません。

> The presenting view controller is responsible for dismissing the view  
>  controller it presented. If you call this method on the presented view  
>  controller itself, UIKit asks the presenting view controller to handle  
>  the dismissal.

(拙訳)

> 表示している側のview controllerは、自分の表示したview controllerを dismiss
> する責任があります。もしあなたがこのメソッドを表示された側のview controller自体に対して呼んだ場合、UIKitは表示している側のview
> controllerに dismiss を取り扱うよう依頼します。

いろいろと解釈の余地のある文章ですが、 _call this method on the presented view  
controller **itself**_ の中の _itself_ は、

[code]

    (表示されている側のview controller).dismiss(...)
    
[/code]

のような呼び方を指していると考えられます。

(表示されている子VCの側で、`self.dismiss(...)`とやるのもこれにあたる。)

多くのサンプルコードの中で、子VC側で「自分自身を閉じる」意味で使われている`self.dismiss(...)`ですが、iOS的にはその方が特殊なケースだと言うことになります。

ご質問内に「実際に試したところ`rootViewController`に代入されている`ViewController`で`dismiss`しても同じ」とあるのは、まさにこの記述に沿った動きになっていたと思っているのですが、いかがでしょうか。




[`dismiss(animated:completion:)`](https://developer.apple.com/documentation/uikit/uiviewcontroller/1621505-dismiss)の動作を論ずるのであれば、公式ドキュメントの以下の部分を正しく理解しておかないといけません。

> The presenting view controller is responsible for dismissing the view  
>  controller it presented. If you call this method on the presented view  
>  controller itself, UIKit asks the presenting view controller to handle  
>  the dismissal.

(拙訳)

> 表示している側のview controllerは、自分の表示したview controllerを dismiss
> する責任があります。もしあなたがこのメソッドを表示された側のview controller自体に対して呼んだ場合、UIKitは表示している側のview
> controllerに dismiss を取り扱うよう依頼します。

いろいろと解釈の余地のある文章ですが、 _call this method on the presented view  
controller **itself**_ の中の _itself_ は、

[code]

    (表示されている側のview controller).dismiss(...)
    
[/code]

のような呼び方を指していると考えられます。

(表示されている子VCの側で、`self.dismiss(...)`とやるのもこれにあたる。)

多くのサンプルコードの中で、子VC側で「自分自身を閉じる」意味で使われている`self.dismiss(...)`ですが、iOS的にはその方が特殊なケースだと言うことになります。

ご質問内に「実際に試したところ`rootViewController`に代入されている`ViewController`で`dismiss`しても同じ」とあるのは、まさにこの記述に沿った動きになっていたと思っているのですが、いかがでしょうか。

