将嵌套枚举作为参数传递

时间:2016-03-03 22:40:18

标签: ios swift enums swift2 uifont

我无法想到在easy init中从嵌套枚举中检索原始值的方法。由于fontName.rawValue没有任何案例,因此Custom无法工作。有什么建议吗?

extension UIFont {
    enum Custom {
        enum Roboto: String {
            case Regular = "RobotoRegular"
        }
        enum SanFrancisco: String {
            case Semibold = "SFSemibold"
        }
    }

    convenience init?(name fontName: Custom, size fontSize: CGFloat) {
        self.init(name: fontName.rawValue, size: fontSize)
    }
}

// Example Usage
UIFont(name: .Roboto.Regular, size: 18)

2 个答案:

答案 0 :(得分:3)

我可以采用稍微不同的方法,但是使用字体也很容易。首先,您需要为字体枚举创建协议,然后为扩展提供默认方法,如下所示:

protocol CustomFontsProtocol {
    var fontName: String { get }
}

extension CustomFontsProtocol {
    func size(size: CGFloat) -> UIFont {
        return UIFont(name: fontName, size: size)!
    }
}

现在为你的枚举你可以像这样创建它:

enum CustomFonts {
    enum Roboto: CustomFontsProtocol {
        case Regular

        var fontName: String {
            switch self {
            case Regular: return "RobotoRegular"
            }
        }
    }

    enum SanFrancisco: CustomFontsProtocol {
        case Semibold

        var fontName: String {
            switch self {
            case Semibold: return "SFSemibold"
            }
        }
    }
}

这将允许您像这样调用字体:

CustomFonts.SanFrancisco.Semibold.size(18)

答案 1 :(得分:1)

这是最简单的替代实现:

$("#btnEmail").click(function () {          
        tinyMCE.triggerSave(true, true);
        $('#emailform').submit();            
        $.ajax({
            url: '@Url.Action("Email")',
            type: "POST",
            data: $('#emailform').serialize(),
            dataType: "json",
            traditional: true,
           //SignalR
            success: function () {
                // Declare a proxy to reference the hub.
                var notifications = $.connection.statusLog;

                notifications.client.updateStatus = function () {
                    getExportStatus()

                };
                // Start the connection.
                $.connection.hub.start().done(function () {
                    alert("connection started")
                    getExportStatus();
                }).fail(function (e) {
                    alert(e);
                });
            }

        });
        function getExportStatus() {
            var tbl = $('#statusTable');
            $.ajax({
                url: '@Url.Action("GetExportStatus")',
                contentType: 'application/html ; charset:utf-8',
                type: 'GET',
                dataType: 'html'
            }).success(function (result) {
                tbl.empty().append(result);
            }).error(function () {

            });
        }
    });