如何要求通用类型使用协议中的特定类型来实现通用协议

曾顿

嗨,我在当前项目中经常使用泛型。但是,我遇到了一个问题:

我需要一个通用函数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紧密关联

您可以使用类型约束来确保传入的对象采用Protowith类型约束。为了使Protorequire拥有权利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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

提供通用协议实现的具体类型

如何实现具有使用关联类型类型的功能的通用协议?

Swift 4:以协议作为关联类型的通用协议的实现

数组中的Swift通用协议类类型

协议和通用类型中的Swift typealias

使用通用协议作为变量类型

在委托协议中为通用类型使用associatedtype

Swift:通用类型符合协议

在Swift中,如何在协议扩展中使用通用枚举类型?

使用具有协议和关联类型的通用类型?

通用协议类型参数与直接协议类型的差异

Swift-使用通用方法为不同的<T>类型实现协议

为什么协议的关联类型在Swift中不使用通用类型语法?

如何将通用协议用作变量类型

如何快速创建通用关联类型协议的数组?

根据通用接口的实现来限制Java中的通用类型

在Swift扩展中将通用类型与协议兼容

具有通用参数类型的协议

Swift:无法识别通用类型协议

我如何要求通用类型在通用函数中实现类似Add,Sub,Mul或Div的操作?

在Swift中使用通用协议实现委托

如何在Swift中构造通用类型协议一致性?

如何使用具有关联类型的协议初始化通用枚举?

具有通用枚举和通用协议的Swift类型擦除

如何在Swift中将具有关联类型的协议(通用协议)作为参数传递?

如何修复协议只能用作通用约束,因为它具有 Self 或相关类型要求错误

快速使用通用协议

协议“行”只能用作通用约束,因为它具有“自身”或关联的类型要求

协议“形状”只能用作通用约束,因为它具有 Self 或相关类型要求