【发布时间】:2021-11-14 17:22:36
【问题描述】:
我有以下数据模型类来表示 MyDataModel:
public class MyDataModel <T> : Codable, Comparable where T:Codable {
...
}
接下来我实现一个包含 MyDataModel 实例的视图。我显然不能在 UIView 的子类中保存通用参数,所以我尝试按如下方式解决它:
protocol MyDataProtocol {
associatedtype T:Codable
var dataParam:T { get set }
}
public class MyDataView: UIView {
public var myData:some MyDataProtocol?
}
但我得到一个错误
An 'opaque' type must specify only 'Any', 'AnyObject', protocols, and/or a base class
所以我可以使用 Any?作为 MyDataProtocol 的类型,但这仍然不会告诉我 MyDataModel 的参数类型。我想知道这里的解决方案是什么以及处理这个问题的正确方法。
【问题讨论】:
-
"我显然不能在 UIView 的子类中保存泛型参数" 真的吗?为什么不呢?
-
我也不明白是什么阻止了你拥有
public class MyDataView<T>: UIView { public var myData: T } -
@KirilS。问题是我需要将这些数据视图存储在另一个类的数组中。然后我还需要将该类声明为泛型,然后链继续。根据我以前的经验,它使事情变得更加复杂(已经在其他地方尝试过,结果一团糟)。
-
@KirilS。而持有这些数据视图的类,为了使事情变得复杂,它可以同时持有不同子类型 T 的数据视图。这将如何工作(即使它使事情变得复杂)?
-
@Sweeper 上面我的cmets中解释过,不可行。