【发布时间】:2020-11-01 10:20:41
【问题描述】:
这是我的包含泛型的结构:
struct SupportOptions<S> where S: ListStyle {
var text: String = ""
var listStyle: S
}
/**
Allow initializing without a `listStyle` https://stackoverflow.com/a/64530006/14351818
*/
extension SupportOptions where S == InsetGroupedListStyle {
init(text: String = "") {
self.text = text
self.listStyle = InsetGroupedListStyle()
}
}
然后我像这样创建它的一个实例:
class ViewController: UIViewController {
var options = SupportOptions()
}
但是,当我尝试更改 options.listStyle 时,它不起作用。
options.listStyle = InsetListStyle()
无法将“InsetListStyle”类型的值分配给“InsetGroupedListStyle”类型
【问题讨论】:
-
不是我的反对意见,但这不是通用的工作方式。一旦你初始化了属性,你就定义了它的类型。 IMO 以后无法更改。您需要创建一个新的 SupportOptions 对象。
-
我没有投反对票,但你做错了什么。您正在以一种非常奇怪的方式混合 SwiftUI 和 UIKit/错误地使用 SwiftUI... SwiftUI 类型不喜欢这样分配。您可能需要为
ListStyle创建自己的枚举包装器并使用它,然后在List上编写一个扩展方法,该方法采用您的包装器枚举并设置列表样式。 -
@LeoDabus 知道了。
-
@Sweeper 枚举听起来不错。
-
因未显示用例而被否决,这将导致您不断提出对其他人没有帮助的问题,并且将其命名为
S而不是 `ListStyle。不能帮助其他人的问题应该交给顾问来回答。