It basically comes down to this. If you use the programmatic tile swapping method, you will need to have all of the frames of the animation inside of the sprite collection. Whether that is ok or not is completely up to you and what your requirements are.
Another difference is the tile swapping is slightly more CPU intensive (since you have to call Build), while the shader method is slightly more GPU intensive. You cannot use TileMap colliders with the tile swapping method due to the cost of rebuilding the colliders. You cannot have dynamic actions take place on the shader method (an example being when the player steps on grass, switch the grass tile to "stepped").
From my experience, using the shader method, the GPU cost is negligible. I am on a Surface 3 tablet and clock a very high FPS even with hundreds of animating tiles.
In the end, I use a mixture of both. When the player steps on grass or cuts a bush, I use the tile swap. When the animation is always running like fire or water, I use shaders.