问题标签 [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 投票
1 回答
354 浏览

ios - 如何在 Swift 中测试与关联类型协议的一致性?

我一直在尝试编写一些代码,允许用户将特定模型“附加”到特定单元格。我打算通过协议和方法来做到这一点associatedType

这是计划:

单元格符合MTZSectionRowConfigurable何时可以显示数据,但不一定需要:

通过使用typealias,它们允许用户定义他们要代表的模型:

模型简单地符合以MTZSectionRowModel明确声明兼容性。

但是,由于表示模型是可选的,因此我需要在调用 configure 方法之前检查单元格是否支持它们。这是在cellForRowAtIndexPath:

在上面的例子中,sectionRow.modelMTZSectionRowModel?类型。

上面的代码无法编译。它产生了臭名昭著的:

“协议 'MTZSectionRowConfigurable' 只能用作通用约束,因为它具有 Self 或关联的类型要求”

我试图检查单元格是否#selector也响应,但不幸的是同样的错误适用。

有什么办法可以让这段代码工作吗?我错过了什么吗?我可以放弃associatedType, 在每个具有广泛 的单元格上实现方法MTZSectionRowModel,但是我需要在每个实现中进行强制转换,但在我看来这不是最佳解决方案。

0 投票
1 回答
230 浏览

swift - Swift 中关联类型的通用 Where 子句歧义

我在操场上写了一些示例代码,想要一个返回两个值之间距离的函数,这两个值都符合 Swift 中的 Strideable 协议,以便我可以使用该distance(to other: Self) -> Self.Stride函数。我的实现如下:

在观察了这个函数一段时间后,我意识到我不确定 where 子句中使用了哪个 Stride,即 froma或 from b。据我了解,a可以bStride. 此外,我没有发表任何声明来确保 a.Stride == b.Stride,尽管我知道我可以扩展我的 where 子句来这样做。

那么,哪一个会习惯于检查等价性U呢?需要明确的是,问题不在于这个特定的代码块,而在于存在这种歧义的任何情况。

0 投票
1 回答
3656 浏览

ios - Swift 3 中 Any 、 Hashable 、 AnyHashable 有什么区别?

我通过大量教程摸索以了解上述 3 个术语之间的区别并找到新的术语type erased容器,现在它让我感到困惑。它提出了很多问题。

为什么要引入 Swift AnyHashable

这三个术语之间的根本区别是什么?

Any和之间的区别AnyHashable

Hashable和之间的区别AnyHashable

何时使用Hashable,何时使用AnyHashable

type erased最后但最令人困惑的是,术语在上下文中的含义是AnyHashable什么?

作为上下文,我遵循了Swift Evolution Proposal SE-0131

0 投票
1 回答
70 浏览

swift - Swift 协议和 equatable

我仍在学习如何使用实现具有关联类型的协议的对象数组。

我有以下协议:

我有WordA,所有的实现WordB和子类化WordCWordNSObject

基本上,我想使用实现 Word 类的不同类来实现数据源协议。这是我想写的那种代码,但显然它不能编译。

这在 Swift 中是否可行?我应该写什么来完成这项工作?

非常感谢你的帮助!

0 投票
2 回答
8399 浏览

rust - 为什么即使 T 实现了特征,我也会收到错误“特征 `Foo` 没有为 `&mut T` 实现”?

我有这个来源:

和错误

定义的唯一方面C是它实现CharacterCache了,但错误却相反。

DrawState, Matrix2d,CharacterCache及其实现, Texture, 和 self.properties ( Text) 由 Piston 2d 图形库提供。总的来说,我误解了一些关于特征的东西。

Text::draw函数签名:

0 投票
0 回答
25 浏览

arrays - 在 3D/多维数组中查找底部类型

首先感谢您的光临。目前,我正在尝试查找多维数组的类型。例如,在以下行中,

你如何确定最底层的类型exampleInt

我努力了,

好像ElementElement不存在的。谢谢您的帮助。

0 投票
1 回答
451 浏览

swift - 具有可散列项的元组类型

我正在尝试创建一个具有 Hashable 项和 Any 项的元组类型,并在 Dictionary 的自定义初始化程序中使用它。然而,斯威夫特不会以这种方式使用 Hashable,我被困在另一种选择中。我不想将我可以创建的字典限制为仅使用字符串作为键。

0 投票
1 回答
1482 浏览

swift - 带有关联类型的 Swift 协议(类型查找不明确)

我需要在协议中创建通用函数,并在扩展中使用默认实现。它的功能应该与 item 一起使用enumRawRepresentablewhere RawValue == Stringalways。我试过了

但我有错误

  • 在此上下文中,“SectionIdentifierEnum”对于类型查找不明确
  • “RawValue”不是“T”的成员类型

任何解决方案

0 投票
0 回答
140 浏览

swift - 一个人如何使用关联类型和类型别名来引用多个具体类(比如),这些类采用引用 Self(比如)的单个协议?

假设我们有以下协议并采用类:

然后我们创建一个HeadProtocol我们需要包含'SubProtocol'的实例

class Head可以静态引用SubAvia typealias,这很好,但是当另一个类实例访问var sub它时,理想情况下是返回一个具体实例,或者取决于 其中的某种私有状态机制,例如:SubASubBclass Head

请问如何实现?

或者,如果这是不可能的,我们很乐意接受有关最佳替代解决方案的建议。

感谢您的阅读。

0 投票
0 回答
139 浏览

rust - 关联引用类型作为值类型

这是Diesel 的一个特征

这是一个派生 impl 的 User 模型Identifiable

根据文档, Identifiable 的实现是在结构的引用上派生的,即 on &User。这是find在. 用户的实现如下。idIdentifiable

Findon a的含义User

编译时的错误:

因为我想找到一个用户i32,所以 impl<&'a Self as Identifiable>::Id会将 id 称为&i32. 我只想id成为一个值而不是引用类型。

当应用于引用类型时,如何将idon的类型定义find为值类型?Identifiable&User