Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.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 通用in协议的使用_Swift_Generics - Fatal编程技术网

Swift 通用in协议的使用

Swift 通用in协议的使用,swift,generics,Swift,Generics,我正在尝试为泛型组件创建数据源协议,但我无法确定如何正确使用associatedtype和typealias。每当我试图在组件中定义数据源时,它都会给出编译错误: 协议“SampleDataSource”只能用作一般约束,因为它具有自身或关联的类型要求“ 以下是我试图实现的一个片段: public protocol SampleDataSource { associatedtype ObjectType func objectAtIndex(index: Int) -> O

我正在尝试为泛型组件创建数据源协议,但我无法确定如何正确使用associatedtype和typealias。每当我试图在组件中定义数据源时,它都会给出编译错误:

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

以下是我试图实现的一个片段:

public protocol SampleDataSource {
    associatedtype ObjectType
    func objectAtIndex(index: Int) -> ObjectType
}

public class SampleComponent<T> {
    typealias ObjectType = T
    
    var dataSource: SampleDataSource? = nil // <-- This line has error
}
公共协议样本数据源{
associatedtype对象类型
func objectAtIndex(索引:Int)->ObjectType
}
公共类采样组件{
typealias ObjectType=T

var-dataSource:SampleDataSource?=nil//错误说明了您需要知道的一切。具有关联类型的协议只能用作约束(例如,在
where
子句中),它们不能用作变量。换句话说,您可以执行:
类SampleComponent{…}
并定义
var-dataSource:T
(不需要typealias)…这也意味着您必须从定义
SampleDataSource
的具体实现开始。我想我现在明白了,谢谢你们两位的帮助。