如何定义接口容器?

问题描述 投票:0回答:1

在其他语言中,为许多设计模式定义接口容器是很常见的。据我了解,在 Swift 中,接口是作为协议实现的。但是,我正在努力使这个简单的代码片段发挥作用:

protocol Item: AnyObject {
}

class Container<Value> where Value: AnyObject {
}

let test = Container<Item>()

编译器抱怨:

“容器”要求“任何项目”是类类型

经过一些研究,通常建议使用

Item
协议的特定实现作为
Container
的类型参数,例如

class ConcreteItem: Item {
}

let test = Container<ConcreteItem>()

但是,这阻碍了拥有不同类型容器的想法:可能还有另一个类

ConcreteItem2
,其实现与
ConcreteItem
的实现完全无关,但符合相同的接口。

那么在 Swift 中实现这项工作的简洁方法是什么?

swift
1个回答
0
投票

这里不能使用泛型,因为它必须是具体类型。让协议成为一个属性

class Container {
    var value: any Item

    init(value: any Item) {
        self.value = value
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.