Передача типа Enum в качестве общего аргумента функции в быстром 2.2 iOS

Я новичок в Swift iOS.. Я пытаюсь использовать тип enum в качестве входного параметра для функции.. вот

тип перечисления:

public enum CFScreen {

public enum CFScreen_Newsfeed: Int {

    case Newsfeed_01 = 2100
    case Newsfeed_02 = 2101
    case Newsfeed_03 = 2102
    case Newsfeed_04 = 2103
    case Newsfeed_05 = 2104
    case Newsfeed_06 = 2105
    case Newsfeed_07 = 2106
    case Newsfeed_08 = 2107
}

public enum CFScreen_Groups: Int {

    case Create = 2200
    case GoBack = 2201
}
}

функция выборки, использующая тип enum в качестве входного параметра

func showCFScreenForEnumType(cFooter: CFScreen.CFScreen_Groups) {

    //Group Related
    switch cFooter {

    case .Create:
        print("Show Create Group")
        break

    case .GoBack:
        print("Show Go Back Screen")
        break
    }
}

func showCFScreenForEnumType(cFooter: CFScreen.CFScreen_Newsfeed) {

    //Group Related
    switch cFooter {

    case .Newsfeed_01:
        print("Show News 01")
        break

    case .Newsfeed_02:
        print("Show News 02")
        break

    case .Newsfeed_03:
        print("Show News 03")
        break

    case .Newsfeed_04:
        print("Show News 04")
        break

    case .Newsfeed_05:
        print("Show News 05")
        break

    case .Newsfeed_06:
        print("Show News 06")
        break

    case .Newsfeed_07:
        print("Show News 07")
        break

    case .Newsfeed_08:
        print("Show News 08")
        break
    }
}

Вызов этой функции следующим образом

let selCFScreenG = CFScreen.CFScreen_Groups.Create
    showCFScreenForEnumType(selCFScreenG)

let selCFScreenNF = CFScreen.CFScreen_Newsfeed.Newsfeed_01
    showCFScreenForEnumType(selCFScreenNF)

Ссылка взята по ссылке: http://www.codingexplorer.com/enumerations-swift/

У меня вопрос, как я могу написать функцию, которая будет принимать типы enum в общем, чтобы я мог объединить эти две функции ниже в одну

func showCFScreenForEnumType(cFooter: CFScreen.CFScreen_Groups)
func showCFScreenForEnumType(cFooter: CFScreen.CFScreen_Newsfeed)

1 ответ

Вы можете создать ограничение общего типа для некоторого протокола, скажем, MyCFScreenEnums, к которому только два перечисления в CFScreen и в функции, которая использует этот универсальный тип (с ограничением типов), выполняет попытку преобразования типов в одно из двух перечислений CFScreen.CFScreen_Newsfeed/CFScreen.CFScreen_Newsfeed, Поскольку только эти два соответствуют MyCFScreenEnumsодно из этих преобразований типов гарантированно будет успешным из-за ограничения типа общего типа (скажем, T) чтобы MyCFScreenEnums,

protocol MyCFScreenEnums { }
extension CFScreen.CFScreen_Newsfeed : MyCFScreenEnums {}
extension CFScreen.CFScreen_Groups : MyCFScreenEnums {}

func showCFScreenForEnumType<T: MyCFScreenEnums>(cFooter: T) {
    if let newsfeed = cFooter as? CFScreen.CFScreen_Newsfeed {
        switch newsfeed {
        case .Newsfeed_01: print("Show News 01")
        case .Newsfeed_02: print("Show News 02")
        case .Newsfeed_03: print("Show News 03")
        case .Newsfeed_04: print("Show News 04")
        case .Newsfeed_05: print("Show News 05")
        case .Newsfeed_06: print("Show News 06")
        case .Newsfeed_07: print("Show News 07")
        case .Newsfeed_08: print("Show News 08")
        }
    }
    else if let groups = cFooter as? CFScreen.CFScreen_Groups {
        switch groups {
        case .Create: print("Show Create Group")
        case .GoBack: print("Show Go Back Screen")
        }
    }
}

/* Example usage */
let foo = CFScreen.CFScreen_Newsfeed.Newsfeed_03
let bar = CFScreen.CFScreen_Groups.Create
showCFScreenForEnumType(foo) // "Show News 03"
showCFScreenForEnumType(bar) // "Show Create Group"
Другие вопросы по тегам