泛型类作为参数

谨慎

我试图使用泛型来摆脱大量的转换。我将提供一个简单的示例:

import UIKit

class List<T> {
    let items: [T]

    init(items: [T]) {
        self.items = items
    }
}

class ListsViewController: UIViewController {
     var lists: [List<AnyObject>] = []
}

let viewController = ListsViewController()
let lists = [List(items: ["Fruits"])]
viewController.lists = lists
                       ^ error "String" is not identical to "AnyObject"

我读过我可以做的

class ListsViewController<T>: UIViewController

但是比我在将链保存到ListsViewController实例的过程更麻烦了……所以这无济于事。

我没有在这里得到什么,为什么该示例与默认的Swift数组一起工作:

import UIKit

class ListsViewController: UIViewController {
     var lists: [AnyObject] = []
}

let viewController = ListsViewController()
let lists = ["Fruits", "Meat"]
viewController.lists = lists

尽管列表的类型为[String],而不是[AnyObject],但没有错误。我的通用类也可以得到相同的行为吗?

非常感谢您的提前帮助!

迈克尔·韦尔奇

2016年8月22日更新:正如@DeFrenZ在评论中指出的那样,我的示例依赖于作为引用类型的集合。但是,在Swift中,集合是值类型。因此,如果您可以编译我的示例,我认为不会有任何问题。变量listslists2是单独的集合。突变一个不会影响另一个。

原始帖子继续如下:

除了我上面的评论和我共享的链接(由Alexandros Salazar撰写,http://nomothetis.svbtle.com/type-variance-in-swift)外,还值得指出为什么通常不键入集合的协方差(无约束)安全的。

这是一个例子:

var lists: [List<AnyObject>] = []
var lists2: [List<String>] = List(items: ["Fruits"])
lists = lists2            // lists is now an alias for lists2 and is a reference to a list of strings
lists.append(MyObject())  // Now I just put a MyObject into a list of strings
var str:String = lists2[1] // assuming the previous lines compiled and ran ok, this would be a problem because lists2[1] is a MyObject. 

(我正在从内存中编写此语法,并且在将集合分配给变量时不记得Swift的实际语义,但是希望这可以指出问题。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将类型参数作为类型参数的类传递给Java中的泛型方法

来自分类Dev

将类型参数作为类型参数的类传递给Java中的泛型方法

来自分类Dev

泛型作为快速关闭的参数

来自分类Dev

使用类对象作为泛型类型

来自分类Dev

使用类级别的泛型有界类型参数作为方法的形式参数

来自分类Dev

上限泛型VS超类作为方法参数?

来自分类Dev

如何在类中使用Comparable作为泛型参数

来自分类Dev

为什么我不能使用Type变量作为泛型类的Type参数

来自分类Dev

使用泛型作为参数

来自分类Dev

使用类实例作为泛型类型

来自分类Dev

作为函数参数继承的泛型

来自分类Dev

C#泛型类作为参数,与泛型类的调用方法具有相同的T

来自分类Dev

泛型类作为带有内部类型的参数

来自分类Dev

如何在Java中将泛型列表类作为参数传递给泛型方法?

来自分类Dev

空或泛型作为参数方法

来自分类Dev

构造函数作为参数:推断类的泛型为函数

来自分类Dev

在泛型类型的泛型类上访问类型参数

来自分类Dev

在方法中使用泛型类作为参数

来自分类Dev

泛型类型作为构造函数参数

来自分类Dev

泛型类使用泛型参数

来自分类Dev

泛型作为抽象方法的参数?

来自分类Dev

泛型类型参数作为参数

来自分类Dev

通过泛型将类作为参数传递

来自分类Dev

泛型和getClass()作为参数

来自分类Dev

C#泛型类作为参数,与泛型类的调用方法具有相同的T

来自分类Dev

泛型类作为带有内部类型的参数

来自分类Dev

如何在Java中将泛型列表类作为参数传递给泛型方法?

来自分类Dev

空或泛型作为参数方法

来自分类Dev

如何使用已知类型作为参数创建具有泛型的泛型类?

Related 相关文章

热门标签

归档