问题标签 [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.
ios - 如何在 Swift 中测试与关联类型协议的一致性?
我一直在尝试编写一些代码,允许用户将特定模型“附加”到特定单元格。我打算通过协议和方法来做到这一点associatedType
。
这是计划:
单元格符合MTZSectionRowConfigurable
何时可以显示数据,但不一定需要:
通过使用typealias
,它们允许用户定义他们要代表的模型:
模型简单地符合以MTZSectionRowModel
明确声明兼容性。
但是,由于表示模型是可选的,因此我需要在调用 configure 方法之前检查单元格是否支持它们。这是在cellForRowAtIndexPath:
在上面的例子中,sectionRow.model
是MTZSectionRowModel?
类型。
上面的代码无法编译。它产生了臭名昭著的:
“协议 'MTZSectionRowConfigurable' 只能用作通用约束,因为它具有 Self 或关联的类型要求”
我试图检查单元格是否#selector
也响应,但不幸的是同样的错误适用。
有什么办法可以让这段代码工作吗?我错过了什么吗?我可以放弃associatedType
, 在每个具有广泛 的单元格上实现方法MTZSectionRowModel
,但是我需要在每个实现中进行强制转换,但在我看来这不是最佳解决方案。
swift - Swift 中关联类型的通用 Where 子句歧义
我在操场上写了一些示例代码,想要一个返回两个值之间距离的函数,这两个值都符合 Swift 中的 Strideable 协议,以便我可以使用该distance(to other: Self) -> Self.Stride
函数。我的实现如下:
在观察了这个函数一段时间后,我意识到我不确定 where 子句中使用了哪个 Stride,即 froma
或 from b
。据我了解,a
可以b
为Stride
. 此外,我没有发表任何声明来确保 a.Stride == b.Stride,尽管我知道我可以扩展我的 where 子句来这样做。
那么,哪一个会习惯于检查等价性U
呢?需要明确的是,问题不在于这个特定的代码块,而在于存在这种歧义的任何情况。
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。
swift - Swift 协议和 equatable
我仍在学习如何使用实现具有关联类型的协议的对象数组。
我有以下协议:
我有WordA
,所有的实现WordB
和子类化WordC
Word
NSObject
基本上,我想使用实现 Word 类的不同类来实现数据源协议。这是我想写的那种代码,但显然它不能编译。
这在 Swift 中是否可行?我应该写什么来完成这项工作?
非常感谢你的帮助!
rust - 为什么即使 T 实现了特征,我也会收到错误“特征 `Foo` 没有为 `&mut T` 实现”?
我有这个来源:
和错误
定义的唯一方面C
是它实现CharacterCache
了,但错误却相反。
DrawState
, Matrix2d
,CharacterCache
及其实现, Texture
, 和 self.properties ( Text
) 由 Piston 2d 图形库提供。总的来说,我误解了一些关于特征的东西。
Text::draw
函数签名:
arrays - 在 3D/多维数组中查找底部类型
首先感谢您的光临。目前,我正在尝试查找多维数组的类型。例如,在以下行中,
你如何确定最底层的类型example
是Int
?
我努力了,
好像Element
是Element
不存在的。谢谢您的帮助。
swift - 具有可散列项的元组类型
我正在尝试创建一个具有 Hashable 项和 Any 项的元组类型,并在 Dictionary 的自定义初始化程序中使用它。然而,斯威夫特不会以这种方式使用 Hashable,我被困在另一种选择中。我不想将我可以创建的字典限制为仅使用字符串作为键。
swift - 带有关联类型的 Swift 协议(类型查找不明确)
我需要在协议中创建通用函数,并在扩展中使用默认实现。它的功能应该与 item 一起使用enum
:RawRepresentable
where RawValue == String
always。我试过了
但我有错误
- 在此上下文中,“SectionIdentifierEnum”对于类型查找不明确
- “RawValue”不是“T”的成员类型
任何解决方案
swift - 一个人如何使用关联类型和类型别名来引用多个具体类(比如),这些类采用引用 Self(比如)的单个协议?
假设我们有以下协议并采用类:
然后我们创建一个HeadProtocol
我们需要包含'SubProtocol'的实例
class Head
可以静态引用SubA
via typealias
,这很好,但是当另一个类实例访问var sub
它时,理想情况下是返回一个具体实例,或者取决于 其中的某种私有状态机制,例如:SubA
SubB
class Head
请问如何实现?
或者,如果这是不可能的,我们很乐意接受有关最佳替代解决方案的建议。
感谢您的阅读。
rust - 关联引用类型作为值类型
这是Diesel 的一个特征。
这是一个派生 impl 的 User 模型Identifiable
。
根据文档, Identifiable 的实现是在结构的引用上派生的,即 on &User
。这是find
在. 用户的实现如下。id
Identifiable
Find
on a的含义User
。
编译时的错误:
因为我想找到一个用户i32
,所以 impl<&'a Self as Identifiable>::Id
会将 id 称为&i32
. 我只想id
成为一个值而不是引用类型。
当应用于引用类型时,如何将id
on的类型定义find
为值类型?Identifiable
&User