Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swiftui 在可重用组件中的iOS和WatchOS上使用不同的.listStyle()?_Swiftui_Swiftui List - Fatal编程技术网

Swiftui 在可重用组件中的iOS和WatchOS上使用不同的.listStyle()?

Swiftui 在可重用组件中的iOS和WatchOS上使用不同的.listStyle()?,swiftui,swiftui-list,Swiftui,Swiftui List,我很想在iOS和WatchOS之间重用列表布局,但是在WatchOS上,InsetGroupedListStyle()不可用 在iOS上创建有条件返回InsetGroupedListStyle()的帮助程序和在WatchOS上创建有条件返回PlainListStyle()的帮助程序的好方法是什么 我尝试了这一点,但得到了一个无法返回的错误ListStyle(这可能是由于SwiftUI需要在编译时知道特定类型造成的) 斯威夫特 List { // ... } .listStyle(MyIn

我很想在iOS和WatchOS之间重用列表布局,但是在WatchOS上,
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()
    #恩迪夫
    } () )
    
    我刚才问了几乎完全相同的问题!您需要返回一个不透明类型:我刚才问了几乎完全相同的问题!您需要返回不透明类型:感谢您对该模式的帮助!感谢您对该图案的帮助!非常感谢。可惜我只能选择一个答案,因为你的和安德鲁斯都很好,很有用。谢谢!可惜我只能选择一个答案,因为你的和安德鲁斯都是伟大而有用的。