Ios 当泛型具有默认值时,使用泛型生成结构的实例

Ios 当泛型具有默认值时,使用泛型生成结构的实例,ios,swift,generics,Ios,Swift,Generics,我想将ListStyle存储在SupportOpts中的一个属性中,因此我将和中的S:ListStyle添加到结构声明中(从此处开始) 但是,当我删除InsetGroupedListStyle()(我已经在SupportOpts中设置了一个默认值)时: 我得到: 无法推断泛型参数“S”,请显式指定泛型参数以解决此问题[fix] 因此,我按下了修复按钮,它现在需要一个s:ListStyle: 我应该在这里放什么 let options: SupportOpts = SupportOpts<

我想将
ListStyle
存储在
SupportOpts
中的一个属性中,因此我将
中的S:ListStyle
添加到结构声明中(从此处开始)

但是,当我删除
InsetGroupedListStyle()
(我已经在
SupportOpts
中设置了一个默认值)时:

我得到:

无法推断泛型参数“S”,请显式指定泛型参数以解决此问题[fix]

因此,我按下了修复按钮,它现在需要一个
s:ListStyle

我应该在这里放什么

let options: SupportOpts = SupportOpts<ListStyle>(title: "Title")
/// Error: Value of protocol type 'ListStyle' cannot conform to 'ListStyle'; only struct/enum/class types can conform to protocols

let options: SupportOpts = SupportOpts<S>(title: "Title")
/// Error: Cannot find type 'S' in scope (well that's kind of obvious...)

let options: SupportOpts = SupportOpts<InsetGroupedListStyle>(title: "Title")
/// this works...
let选项:SupportOpts=SupportOpts(标题:“标题”)
///错误:协议类型“ListStyle”的值不能与“ListStyle”一致;只有结构/枚举/类类型才能符合协议
let选项:SupportOpts=SupportOpts(标题:“标题”)
///错误:在作用域中找不到类型“S”(这有点明显…)
let选项:SupportOpts=SupportOpts(标题:“标题”)
///这很有效。。。

我是否必须指定
SupportOpts(title:“title”)
。这不是正确的方法。如果有人选择了不同的<代码>代码>:
let options = SupportOpts<InsetListStyle>(title: "Title")
类型推断将解决其余问题:

let options = SupportOpts(title: "Title")

但是,如果我有另一个包含
var选项的结构:SupportOpts
(只是类型,没有初始化),该怎么办?它不起作用。。。我得到“对泛型类型'SupportOpts'的引用需要参数”中的“确定,我用
struct OtherStruct:View将其修复,其中S:ListStyle{var options:SupportOpts}
,不确定这是否是正确的方法,尽管是的,这是正确的。您还可以将其编写为
struct-OtherStruct:View
。这两者是相同的。
let options: SupportOpts = SupportOpts<ListStyle>(title: "Title")
/// Error: Value of protocol type 'ListStyle' cannot conform to 'ListStyle'; only struct/enum/class types can conform to protocols

let options: SupportOpts = SupportOpts<S>(title: "Title")
/// Error: Cannot find type 'S' in scope (well that's kind of obvious...)

let options: SupportOpts = SupportOpts<InsetGroupedListStyle>(title: "Title")
/// this works...
let options = SupportOpts<InsetListStyle>(title: "Title")
struct SupportOpts<S> where S: ListStyle {
    var title: String = "Placeholder"
    var listStyle: S     // No default value here
}
extension SupportOpts where S == InsetGroupedListStyle {
    init(title: String) {
        self.init(title: title, listStyle: InsetGroupedListStyle())
    }
}
let options = SupportOpts(title: "Title")