Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift泛型参数不能绑定到非@objc协议_Swift_Generics - Fatal编程技术网

Swift泛型参数不能绑定到非@objc协议

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

以下代码产生编译错误“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 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
}