arrays - 追加到 Swift 中的通用数组

标签 arrays swift generics

我有一个名为 Foo 的协议(protocol)和一个名为 Bar 的结构。 Bar 符合 Foo

protocol Foo {}    
struct Bar: Foo {}

Bar 实例附加到 Bar 数组可以按预期工作。

var array = [Bar]()
array.append(Bar())

现在,我有一个名为 Baz 的通用结构,它使用符合 Foo 的类型(例如 Bar)进行初始化。

struct Baz<T: Foo> {
    private(set) var array = [T]()

    init() {
        if T.self is Bar.Type {
            // Error: Cannot invoke 'append' with an argument list of type (Bar)
            array.append(Bar())
        }
    }
}

尝试追加到数组会导致以下错误:

Cannot invoke 'append' with an argument list of type (Bar)

为什么这没有按预期工作?

顺便说一句,用例是这样的:

let bazBarStack = Baz<Bar>().array
let bazQuxStack = Baz<Qux>().array

最佳答案

您需要将对象存储在数组中,且类型为 T。因此,您应该使用 as 进行强制转换! T:

struct Baz<T: Foo> {
    private(set) var array = [T]()

    init() {
        if T.self is Bar.Type {
            array.append(Bar() as! T)
        }
    }
}

关于arrays - 追加到 Swift 中的通用数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35858872/

相关文章:

c - 如何防止字符指针缓冲区溢出?

arrays - (自己回答)Swift 数组在函数 numberofRows 中返回 0 个计数(在 tableView 中,但在其他任何地方它返回正确数量的 array.count

c# - 转换为抽象通用基类

angularjs - 使用 LoDash 合并包含相同键/值的对象

javascript - 如何从 Javascript 数组中获取每天的最新条目?

ios - 播放 mp3/wav 声音导致异常

ios - UIButton 阴影不绘制

java - 通过泛型避免向下转型?

java - 我需要获取一个通用惰性加载器列表,它将实例化其推断类型的实例

javascript - 如何使用 JavaScript 获取 JSON Tree Schema 的属性值?