TL;DR If page is a cache for disk reading, it never goes to swap.
Your question signifies you already know how swap works (or rather - how virtual memory works). Now the simple critical step in understanding disk cache, is to note it is handled in exactly the same way. There is no "application data" and "disk cache", it's just all a single virtual memory mechanism.
Each page is supported by permanent storage: instead of declaring the page as "disk cache", you can also declare "this page is supported by /var/spool/mail/root".
Instead of declaring the page as "application memory" you can also declare "this page is supported by swap space" (aka "it is anonymous" = it isn't supported by any named file).
If the page is dirty, it needs to be saved to its own permanent storage - independent if it's a named file or swap space. If the page is not dirty, it means by definition that exactly the same bytes are already on page's permanent storage. No need to do anything - OS can give this page for re-use at any time it finds suitable.
What I called here the "supported by" attribute people mostly call memory mapping and what I described here is really how