Swift泛型参数不能绑定到非@objc协议
以下代码产生编译错误“Generic parameter”T无法绑定到失败行上的非@objc协议类型“AAA”。当我使用类而不是协议时,它工作正常。此外,如果我将@objc添加到协议中,它也工作,但仅在6.4 beta版本中。任何建议都会有所帮助Swift泛型参数不能绑定到非@objc协议,swift,generics,Swift,Generics,以下代码产生编译错误“Generic parameter”T无法绑定到失败行上的非@objc协议类型“AAA”。当我使用类而不是协议时,它工作正常。此外,如果我将@objc添加到协议中,它也工作,但仅在6.4 beta版本中。任何建议都会有所帮助 protocol AAA { var id: String { get set } } class BBB: AAA { var id: String = "" } class BBBService { func getAl
protocol AAA {
var id: String { get set }
}
class BBB: AAA {
var id: String = ""
}
class BBBService {
func getAll<T:AAA>() -> [T] {
var returnArray:[T] = [T]()
return returnArray
}
}
class TestIt
{
func myTest() {
var service = BBBService()
var fail:[AAA] = service.getAll() // fails with Generic parameter "T" cannot be bound to non-@objc protocol type AAA
var succeed:[BBB] = service.getAll()
}
}
协议AAA{
变量id:字符串{get set}
}
BBB级:AAA级{
变量id:String=“”
}
BBB类服务{
func getAll()->[T]{
var returnArray:[T]=[T]()
返回数组
}
}
类测试
{
func myTest(){
var service=BBBService()
var fail:[AAA]=service.getAll()//带有泛型参数“T”的fails不能绑定到非@objc协议类型AAA
var success:[BBB]=service.getAll()
}
}
这也失败了:
<T where T:AAA>
更新-从实际的角度来看,添加@objc会在我的应用程序中引起其他问题。因此,在此时此刻,这不是一个选项。问题在于这一行:
getAll<T: AAA>() -> [T]
它工作正常(返回对AAA
-一致性对象的引用数组,可以是BBB
类型,也可以是CCC
类型),并且:
func getAll<T: AAA>() -> [T] {
var returnArray: [T] = [] // what is T? No idea.
return returnArray
}
这是一个显示错误的小例子-这不是我在实际应用程序中所做的。我正在寻求帮助,了解这是否是已知的Swift限制,或者我是否做错了什么。
func getAll<T: AAA>() -> [T] {
var returnArray: [T] = [] // what is T? No idea.
return returnArray
}
func getAll() -> [AAA] {
var returnArray: [AAA] = []
return returnArray
}