带有协议的 Swift 泛型数组

Gen*_*ain 2 arrays generics protocols swift

我只是好奇是否可以做如下的事情

protocol Data { }

class A: Data { }

class B: Data { }

class Generic<T> { }

class doStuff {

    func prepareToDoStuff() {
        self.doTheStuffWithGenerics([Generic<A>(), Generic<B>])
    }

    func doTheStuffWithGenerics<T: Generic<Data>>(_ generics: [T]) {

    }
}
Run Code Online (Sandbox Code Playgroud)

目前我的编译器告诉我没有说

“无法将类型‘Generic[A]’的值转换为预期元素类型‘Generic[Data]’”

有什么想法吗?解决方案?

red*_*t84 5

其他人已经解释了为什么不起作用。所以我只关注解决方法。Collection苹果自己解决这个问题的方法(例如查看协议)是使用协议。将逻辑移至类中Generic或在协议上使用扩展类是很常见的。

例如:

protocol Data { }
protocol GenericDataType {
    func doStuff()
}

class A: Data { }
class B: Data { }


class Generic<T: Data>: GenericDataType {
    func doStuff() {
        print("Processing element")
    }
}

class doStuff {

    func prepareToDoStuff() {
        let array: [GenericDataType] = [Generic<A>(), Generic<B>()]
        self.doTheStuffWithGenerics(array)
    }

    func doTheStuffWithGenerics(_ generics: [GenericDataType]) {
        for element in generics {
            element.doStuff()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

5115 次

最近记录:

8 年,7 月 前