嗨,我在当前项目中经常使用泛型。但是,我遇到了一个问题:
我需要一个通用函数foo<T>
,以便能够采用符合特定类型通用协议的参数。
例如,在Java中,我可以执行以下操作:
public interface Proto<B> {
public void SomeFunction()
}
public class SampleClass {
}
public class Conforms extends Proto<SampleClass> {
@Override
public void SomeFunction () {}
}
public class TestingClass {
public void Requires (Proto<SampleClass> param) {
// I can use param
}
}
我将如何Requires()
在Swift中执行相同的功能?我知道在Swift中您可以typealias
在泛型协议中使用。如何基于来约束参数typealias
?
原型似乎不像Swift中的类和结构那样具有泛型,但是您可以将关联的类型与typealias
紧密关联。
您可以使用类型约束来确保传入的对象采用Proto
with类型约束。为了使Proto
您require
拥有权利B
,您使用where
。
苹果公司关于仿制药的文档有很多信息。
这篇博文也是有关使用泛型执行更复杂操作的很好的信息来源。
protocol Proto {
typealias B
func someFunction()
}
class SampleClass {}
class Conforms : Proto {
typealias B = SampleClass
func someFunction() { }
}
class TestingClass {
func requires<T: Proto where T.B == SampleClass>(param: T) {
param.someFunction()
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句