问题标签 [associated-types]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
52 浏览

swift - AssociatedType、泛型和继承的运行时错误

为什么以下代码在运行时中断(EXC_BAD_ACCESS)?


额外信息

经过一些调试,我发现如果您删除(或将其移至 Class1)以下行:

代码在运行时工作。但我还是不明白为什么。我错过了什么吗?我正在使用 XCode 版本 7.3 (7D175)、Swift 2.2

也许它与使用 NSObject、嵌套泛型、这种泛型继承层次结构或所有它们混合在一起有关。

0 投票
1 回答
270 浏览

swift - Array 在哪里定义了 Element 关联类型?

在 Swift 2.3 中,Array 在哪里定义了 Element 关联类型?

它必须定义它,因为它实现了具有 Element 关联类型的 GeneratorType。Dictionary 和 Set 都定义了 Element 但 Array 在哪里定义它?

Array 有一个称为 Element 的泛型类型,具有泛型类型是否满足 GeneratorType 协议?

我在操场上试过这个,但对我来说不起作用。

例如

0 投票
3 回答
1150 浏览

swift - 如何覆盖在子类中具有关联类型参数的方法?

我试图做的事情:

错误是:

方法不会覆盖其超类中的任何方法

如果我尝试改用 ItemType:

错误是:

在这种情况下,“ItemType”对于类型查找不明确

有没有办法使这项工作?

0 投票
0 回答
281 浏览

swift - 向协议的“关联类型”添加约束

考虑以下代码:

是否可以在 中添加约束associatedtype

类似的东西: associatedtype _Bound: __Strideable where _Bound.String: SignedInteger?(那个显然不起作用)

0 投票
2 回答
272 浏览

ios - 协议继承问题

我尝试建立各种协同工作的协议。不幸的是,我不能让它们按我想要的方式工作。看下面的代码,我想我的目标很明显:我想要一个符合协议 X 的类。如果它符合协议 Y,但协议 Y 继承自协议 X,它也应该被接受为符合协议的类. 相反,我收到以下编译错误

Unable to infer associated type 'VC' for protocol 'ViewModelType'

Inferred type 'ExampleViewControllerType' (by matching requirement 'viewController') is invalid: does not conform to 'ViewType'

当前设置:

0 投票
0 回答
512 浏览

swift - 在 Swift 中,具有不同类型参数或关联类型的数组?

假设您有一些抽象,例如Filter,并且您想要它们的数组。不同的过滤器处理不同类型的值,因此您希望将其设为类型参数或关联类型。但是数组可以有不同种类的过滤器。像这样的东西...

我尝试了一个协议......

编译器错误是:protocol 'Filter' can only be used as a generic constraint because it has Self or associated type requirements

更新

人们建议这是重复的。我将不得不进行一些实验,看看我是否可以使用这种擦除技术。我喜欢它比简单地使用更好的类型安全性[Any]

0 投票
2 回答
149 浏览

ios - 约束协议的关联类型本身

我正在尝试创建通用 CollectionView 数据源。我有两个协议,第一个 - 一些抽象单元,第二个表示符合类可以由某个抽象单元呈现,并且应该只包含引用该单元的关联类型。他们的实现可能如下所示:

在使用时,它可能如下所示:

这段代码的问题是我不能限制(因此在编译时确保) CellPresentable.Cell.T 等于 CellPresentable 本身(如示例中所示)。编译器错误可以清楚地看到。

目标是制作纯编译时充分的代码,可以证明该项目可以由给定的单元格呈现(同样,在编译时),我不想强​​制向下转换或任何其他运行时检查。

是否可以?如果是这样,怎么做?

UPD:David Rodrigues 的回答有效,但这意味着(T.Cell.T != T)只有在我即将创建CollectionViewDataSource. 我希望它恰好在我定义我的实体对EntityPresentingCell协议的一致性时发生。换句话说,当我写类似的东西时,编译器应该抱怨

但不是在我创建CollectionViewDataSource实例时。确保单元格类型是实体的责任,而不是CollectionViewDataSource.

0 投票
1 回答
250 浏览

swift - 具有关联类型的协议中的通用变量。漏洞?

我正在使用 Xcode 7.3 和 Swift 2.3。我在使用具有变量的关联类型的协议时遇到困难。看例子:

出于某种原因,编译器显示错误: 错误图像 这怎么可能?难道我做错了什么?它是一个错误吗?一个已知的?

我试过的:

为该关联类型定义类型别名:

不。

改为使用方法:

只是得到了不同的错误: 第二个错误图像

我应该如何创建具有关联类型和变量的协议并避免此错误?

0 投票
1 回答
423 浏览

ios - 如何在两个协议之间共享关联类型?

我需要声明两个协议,它们都有关联类型:

使用当前的协议定义,associatedtype DataTypeofMyView与 in 中的并不完全相同MyLayout

编译器告诉我们类型不一样。

有没有办法在两个协议之间共享关联类型来解决我的问题?谢谢。

0 投票
3 回答
7870 浏览

swift - 在 Swift 中,如何转换为具有关联类型的协议?

在下面的代码中,我想测试是否xSpecialController. 如果是的话,我想得到currentValue一个SpecialValue. 你怎么做到这一点?如果没有演员表,那么其他一些技术。

那里的最后一行不会编译。错误是:协议“SpecialController”只能用作通用约束,因为它具有 Self 或关联的类型要求。