Interesting discussion. Have swam is definitely non-standard, as is have drank, they grate on my ears whenever I hear them - but strangely enough, have swum and have drunk sound weird also, even though those are the forms I automatically go to. I suspect these two verbs (and maybe sing? will have changed their past particples within say, fifty or 100 years.
Maybe not - this sort of pattern still seems to be productive in some varieties of English. In England, and maybe elsewhere, 'sneaked' is being replaced by the seemingly irregular 'snuck' that I heard growing up and had presumed was standard because it 'seemed right.' We might be stuck with vowel shifts for a long time yet.
To be honest, in my area of the US, we always use the verb "to go" when we talk about swimming. This sentence sounds grammatically correct, but ridiculous and overly proper, as we'd say, "Have you ever gone swimming in the swimming pool?" As long as we're talking about dialects!
I am a dutch native speaker. It is: ergens IN gezwommen hebben. SO ik heb in de zee gezwonnen. AND ik BEN NAAR iets gezwommen. SO apparently it is not only the verb ZWEMMEN that is responsible for the HEBBEN or ZIJN choice but it is the combination: ZWEMMEN IN = HEBBEN and ZWEMMEN NAAR is ZIJN. trying another verb: FIETSEN. Ik HEB IN de tuin GEFIETST. EN ik BEN NAAR huis GEFIETST. The same with Lopen.
swum is the past participle of the verb swim.
Hope this helps.