swift - "subclassing"通用结构

标签 swift generics value-type

是否可以在 swift 中对通​​用结构进行子类化?

假设我们有一个结构:

struct Foo<T> {}

我想要“子类化”它以添加一些功能:

struct Something {}
struct Bar<F>: Foo<Something> { /*<<<= ERROR: Inheritance from non-protocol type 'Foo<Something>' */
    let store: Something
    let someF: F
}

如果您将结构替换为类,则此示例有效。

class Foo<T> {}
//struct Bar1<T>: Foo<T> { /* Inheritance from non-protocol type 'Foo<T>' */
//    let name = "Bar"
//}


class Something {}
class Bar<F>: Foo<Something> { /* Inheritance from non-protocol type 'Foo<Something>' */
    let store: F?
    init(value: F?) {
        self.store = value
    }
}

知道如何使它适用于结构吗?

我试图坚持使用值类型,但 swift 让它变得困难。

最佳答案

据我了解,继承是类和非类对象(如 swift 中的结构和枚举)之间的主要区别。类具有继承性,其他对象类型没有。

因此我认为答案是“不,现在不会,永远不会,设计使然。”

编辑:

正如 Ammo 在他下面的评论中所指出的,另一个关键区别是类对象是通过引用传递的,而非类对象(如结构)是通过值传递的。

关于swift - "subclassing"通用结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31465100/

相关文章:

generics - 如何检查该对象是 Haxe 中泛型的实例

原型(prototype)中值类型的javascript属性

java 泛型 : getting class of a class with generic parameters

java - 方法中的通用参数 - Java

c# - C# 中 "half"(binary16) 的类型是什么?

swift - 在非类绑定(bind)协议(protocol)的扩展中,实例必须被视为值类型

objective-c - 使用 Swift 中的 block 调用 Objective-C 方法

ios - 带有 swift 的动画宽度标签

swift - 复制命令 - 深复制还是浅复制?

ios - 从图库中获取图像很慢