Can't RETURN a CUSTOM FONT

I've built a little function to return the best font to fit within an available height. I include a custom font in my iteration through the available fonts.

I have two problems I can't seem to figure out. Maybe you know how to handle these?

//////////////////////////////

//! Load my custom font - sized between native fonts 3 and 4
dcb35 = WatchUi.loadResource(Rez.Fonts.dcb35);

Fonts[:F0] = 0; Fonts[:F1] = 1; Fonts[:F2] = 2; Fonts[:F3] = 3; Fonts[:F35] = dcb35; Fonts[:F4] = 4;

bestFont = selectBestFont(availableHeight);

///////////////////////////////

In almost any context I can refer to Fonts[:F35] everywhere I can refer to native fonts such as Fonts[:F2]. Such as dc.getFontHeight(), etc. Cool.

ISSUE #1: I'd love to iterate through the elements of my associate array, like a "for" or "while" loop. I don't think there is a way to do this.

ISSUE #2: Worse, in my little selectBestFont() function, I can return native fonts just fine (eg: Fonts[:F2]), but I get a "Stack Overflow Error" if I try to return Fonts[:F35] or even dcb35. Is there a way to return this custom Font, so that "bestFont" can then be used regardless of being a native or custom font?