问题标签 [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.
swift - AssociatedType、泛型和继承的运行时错误
为什么以下代码在运行时中断(EXC_BAD_ACCESS)?
额外信息
经过一些调试,我发现如果您删除(或将其移至 Class1)以下行:
代码在运行时工作。但我还是不明白为什么。我错过了什么吗?我正在使用 XCode 版本 7.3 (7D175)、Swift 2.2
也许它与使用 NSObject、嵌套泛型、这种泛型继承层次结构或所有它们混合在一起有关。
swift - Array 在哪里定义了 Element 关联类型?
在 Swift 2.3 中,Array 在哪里定义了 Element 关联类型?
它必须定义它,因为它实现了具有 Element 关联类型的 GeneratorType。Dictionary 和 Set 都定义了 Element 但 Array 在哪里定义它?
Array 有一个称为 Element 的泛型类型,具有泛型类型是否满足 GeneratorType 协议?
我在操场上试过这个,但对我来说不起作用。
例如
swift - 如何覆盖在子类中具有关联类型参数的方法?
我试图做的事情:
错误是:
方法不会覆盖其超类中的任何方法
如果我尝试改用 ItemType:
错误是:
在这种情况下,“ItemType”对于类型查找不明确
有没有办法使这项工作?
swift - 向协议的“关联类型”添加约束
考虑以下代码:
是否可以在 中添加约束associatedtype
?
类似的东西:
associatedtype _Bound: __Strideable where _Bound.String: SignedInteger
?(那个显然不起作用)
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'
当前设置:
swift - 在 Swift 中,具有不同类型参数或关联类型的数组?
假设您有一些抽象,例如Filter
,并且您想要它们的数组。不同的过滤器处理不同类型的值,因此您希望将其设为类型参数或关联类型。但是数组可以有不同种类的过滤器。像这样的东西...
我尝试了一个协议......
编译器错误是:protocol 'Filter' can only be used as a generic constraint because it has Self or associated type requirements
更新
人们建议这是重复的。我将不得不进行一些实验,看看我是否可以使用这种擦除技术。我喜欢它比简单地使用更好的类型安全性[Any]
ios - 约束协议的关联类型本身
我正在尝试创建通用 CollectionView 数据源。我有两个协议,第一个 - 一些抽象单元,第二个表示符合类可以由某个抽象单元呈现,并且应该只包含引用该单元的关联类型。他们的实现可能如下所示:
在使用时,它可能如下所示:
这段代码的问题是我不能限制(因此在编译时确保) CellPresentable.Cell.T 等于 CellPresentable 本身(如示例中所示)。编译器错误可以清楚地看到。
目标是制作纯编译时充分的代码,可以证明该项目可以由给定的单元格呈现(同样,在编译时),我不想强制向下转换或任何其他运行时检查。
是否可以?如果是这样,怎么做?
UPD:David Rodrigues 的回答有效,但这意味着(T.Cell.T != T)
只有在我即将创建CollectionViewDataSource
. 我希望它恰好在我定义我的实体对EntityPresentingCell
协议的一致性时发生。换句话说,当我写类似的东西时,编译器应该抱怨
但不是在我创建CollectionViewDataSource
实例时。确保单元格类型是实体的责任,而不是CollectionViewDataSource
.
ios - 如何在两个协议之间共享关联类型?
我需要声明两个协议,它们都有关联类型:
使用当前的协议定义,associatedtype DataType
ofMyView
与 in 中的并不完全相同MyLayout
:
编译器告诉我们类型不一样。
有没有办法在两个协议之间共享关联类型来解决我的问题?谢谢。
swift - 在 Swift 中,如何转换为具有关联类型的协议?
在下面的代码中,我想测试是否x
为SpecialController
. 如果是的话,我想得到currentValue
一个SpecialValue
. 你怎么做到这一点?如果没有演员表,那么其他一些技术。
那里的最后一行不会编译。错误是:协议“SpecialController”只能用作通用约束,因为它具有 Self 或关联的类型要求。