【发布时间】:2017-08-21 19:54:43
【问题描述】:
我正在开发一些框架并遇到了问题。
我有一个公共协议:
public protocol MyPublicProtocol1 {
}
还有一个,它包含一个传递了通用参数的函数。泛型参数有一个约束——参数类型必须实现第一个公共协议:
public protocol MyPublicProtocol2 {
func someFunc<T: MyPublicProtocol1>(completion: (T) -> ())
}
然后我正在实施我的协议,而不是在公共课程中。在带有泛型参数的函数内部,我必须调用另一个不带泛型参数的函数,如下所示:
func anotherFuncWith(completion: (MyPublicProtocol1) -> ())
下面是实现的样子:
class MyPublicProtocol1Impl: MyPublicProtocol1 {
}
class MyPublicProtocol2Impl: MyPublicProtocol2 {
func someFunc<T: MyPublicProtocol1>(completion: (T) -> ()) {
anotherFuncWith(completion: completion)
}
}
当然我在最后一个字符串中有错误。
我不能声明 someFunc(completion:) 没有像这样的通用参数:
func someFunc(completion: (MyPublicProtocol1Impl) -> ())
因为 MyPublicProtocol1Impl 类不能公开。而且由于某些原因,我也不能声明 anotherFuncWith(completion:) 采用通用参数。
有没有办法将 (T: MyPublicProtocol1) -> () 完成部分“转换”为 (MyPublicProtocol1) -> ()? p>
非常感谢任何帮助或建议!感谢您阅读我的故事!
【问题讨论】:
-
我建议您更清楚地了解您打算使用的用途以及您尝试通过尝试的解决方案解决的潜在问题。经常发现最好的解决方案与我目前的方法不同。
标签: swift generics swift3 protocols