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")