我是 Swift iOS 的新手。我正在尝试使用枚举类型作为函数的输入参数。这是
示例枚举类型:
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
}
}
使用枚举类型作为输入参数的示例函数
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/
我的问题是如何编写一个接受枚举类型的函数,以便将下面的两个函数合并为一个
func showCFScreenForEnumType(cFooter: CFScreen.CFScreen_Groups)
func showCFScreenForEnumType(cFooter: CFScreen.CFScreen_Newsfeed)
最佳答案
您可以为某些协议(protocol)创建通用类型约束,例如 MyCFScreenEnums
,只有 CFScreen
中的两个枚举符合该协议(protocol),并且在使用此协议(protocol)的函数中(类型受限)泛型,尝试将类型转换为两个枚举之一 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"
关于swift - 将枚举类型作为通用参数传递给 swift 2.2 iOS 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36937744/