我需要在swift的switch case之后将类作为响应,我得到了这个函数的编译问题。
func getOptClass(signal : String) -> AnyClass{
var result = AnyClass
switch(signal){
case "IntRR":
result = BPMClass.self
break
case "BPM":
result = BPMClass.self
break
case "ECG":
result = ECGClass.self
break
default:
result = nil
break
}
return result
}
这是错误:
Swift Compiler Error Group
/Users/gab/Desktop/desktopAppli/mobileApp/mobileApp/GlobalCstes.swift:68:18: Expected member name or constructor call after type name
/Users/gab/Desktop/desktopAppli/mobileApp/mobileApp/GlobalCstes.swift:68:18: Use '.self' to reference the type object
/Users/gab/Desktop/desktopAppli/mobileApp/mobileApp/GlobalCstes.swift:72:22: Cannot assign value of type 'BPMClass.Type' to type 'AnyClass.Protocol' (aka 'AnyObject.Type.Protocol')
/Users/gab/Desktop/desktopAppli/mobileApp/mobileApp/GlobalCstes.swift:76:22: Cannot assign value of type 'BPMClass.Type' to type 'AnyClass.Protocol' (aka 'AnyObject.Type.Protocol')
/Users/gab/Desktop/desktopAppli/mobileApp/mobileApp/GlobalCstes.swift:80:22: Cannot assign value of type 'ECGClass.Type' to type 'AnyClass.Protocol' (aka 'AnyObject.Type.Protocol')
/Users/gab/Desktop/desktopAppli/mobileApp/mobileApp/GlobalCstes.swift:84:22: Nil cannot be assigned to type 'AnyClass.Protocol' (aka 'AnyObject.Type.Protocol')
/Users/gab/Desktop/desktopAppli/mobileApp/mobileApp/GlobalCstes.swift:87:12: Cannot convert return expression of type 'AnyClass.Protocol' (aka 'AnyObject.Type.Protocol') to return type 'AnyClass' (aka 'AnyObject.Type')
答案 0 :(得分:2)
在你的情况下,我可能是一个返回表示你的类的泛型类型的函数。你可以尝试这样的事情:
func getOptClass<T>(signal : String) -> T {
switch(signal) {
case "IntRR", "BPM":
return T as! BPMClass
case "ECG":
return T as! ECGClass
default:
return nil
}
}
此处T
表示您创建的任何类型的任何类型。在每个开关案例中,我都会使用相应的类来转换此类型。只有在想要处理特定情况时,才需要像JAVA一样放置break语句。我也简化了你的开关,我认为它应该有效。
答案 1 :(得分:1)
您需要将结果声明为AnyClass,而不是将其值设置为:
var result: AnyClass!
然后添加你的switch语句。你不需要休息;他们不需要迅速;开始一个新的case语句将打破前一个,除非你添加fall through。
另外,你应该返回AnyClass ?,因为你有一个nil选项。
答案 2 :(得分:0)
func getOptClass(signal : String) -> AnyClass? {
var result: AnyClass?
switch(signal) {
case "IntRR", "BPM":
result = BPMClass.self
case "ECG":
result = ECGClass.self
default:
result = nil
}
return result
}
请注意,返回类型现在是可选的。这是你被允许返回零的唯一方式。