Swiftui 在可重用组件中的iOS和WatchOS上使用不同的.listStyle()?
我很想在iOS和WatchOS之间重用列表布局,但是在WatchOS上,Swiftui 在可重用组件中的iOS和WatchOS上使用不同的.listStyle()?,swiftui,swiftui-list,Swiftui,Swiftui List,我很想在iOS和WatchOS之间重用列表布局,但是在WatchOS上,InsetGroupedListStyle()不可用 在iOS上创建有条件返回InsetGroupedListStyle()的帮助程序和在WatchOS上创建有条件返回PlainListStyle()的帮助程序的好方法是什么 我尝试了这一点,但得到了一个无法返回的错误ListStyle(这可能是由于SwiftUI需要在编译时知道特定类型造成的) 斯威夫特 List { // ... } .listStyle(MyIn
InsetGroupedListStyle()
不可用
在iOS上创建有条件返回InsetGroupedListStyle()
的帮助程序和在WatchOS上创建有条件返回PlainListStyle()
的帮助程序的好方法是什么
我尝试了这一点,但得到了一个无法返回的错误ListStyle
(这可能是由于SwiftUI需要在编译时知道特定类型造成的)
斯威夫特
List {
// ...
}
.listStyle(MyInsetGroupedListStyle())
List {
// ...
}
.listStyle(#if os(watchOS) PlainListStyle() #else InsetGroupedListStyle() #endif)
助手,斯威夫特
public func MyInsetGroupedListStyle() -> ListStyle {
#if os(watchOS)
return PlainListStyle()
#else
return InsetGroupedListStyle()
#endif
}
另一种方法可以是内联指定listStyle,但swift不支持表达式中的条件编译:
斯威夫特
List {
// ...
}
.listStyle(MyInsetGroupedListStyle())
List {
// ...
}
.listStyle(#if os(watchOS) PlainListStyle() #else InsetGroupedListStyle() #endif)
您可以使用视图上的扩展来实现所需的功能。这允许您添加带有所需操作系统参数的
listStyle
修改器
extension View {
public func customListStyle() -> some View {
#if os(watchOS)
return self.listStyle(PlainListStyle())
#else
return self.listStyle(InsetGroupedListStyle())
#endif
}
}
然后您可以这样使用它:
List {
// items in list go here
}
.customListStyle()
您可以使用视图上的扩展来实现所需的功能。这允许您添加带有所需操作系统参数的
listStyle
修改器
extension View {
public func customListStyle() -> some View {
#if os(watchOS)
return self.listStyle(PlainListStyle())
#else
return self.listStyle(InsetGroupedListStyle())
#endif
}
}
然后您可以这样使用它:
List {
// items in list go here
}
.customListStyle()
使用
public var myInsetGroupedListStyle:一些ListStyle{
#如果操作系统(watchOS)
PlainListStyle()
#否则
InsetGroupedListStyle()
#恩迪夫
}
listStyle({
#如果操作系统(watchOS)
PlainListStyle()
#否则
InsetGroupedListStyle()
#恩迪夫
} () )
使用
public var myInsetGroupedListStyle:一些ListStyle{
#如果操作系统(watchOS)
PlainListStyle()
#否则
InsetGroupedListStyle()
#恩迪夫
}
listStyle({
#如果操作系统(watchOS)
PlainListStyle()
#否则
InsetGroupedListStyle()
#恩迪夫
} () )
我刚才问了几乎完全相同的问题!您需要返回一个不透明类型:我刚才问了几乎完全相同的问题!您需要返回不透明类型:感谢您对该模式的帮助!感谢您对该图案的帮助!非常感谢。可惜我只能选择一个答案,因为你的和安德鲁斯都很好,很有用。谢谢!可惜我只能选择一个答案,因为你的和安德鲁斯都是伟大而有用的。