微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决可重用组件中 iOS 和 WatchOS 上的不同 .listStyle()?

我很想在 iOS 和 WatchOS 之间重复使用列表布局,但 InsetGroupedListStyle() 在 WatchOS 上不可用。

创建一个在 iOS 上有条件地返回 InsetGroupedListStyle() 的助手的好方法是什么,例如。 PlainListStyle() 在 WatchOS 上?

我试过这个,但得到一个错误,我不能返回 ListStyle(这可能是由于 SwiftUI 需要在编译时知道特定类型)。

View.swift

List {
    // ...
}
.listStyle(MyInsetGroupedListStyle())

Helpers.swift

public func MyInsetGroupedListStyle() -> ListStyle {
    #if os(watchOS)
        return PlainListStyle()
    #else
        return InsetGroupedListStyle()
    #endif
}

另一种方法是指定 listStyle 内联,但 swift 不支持表达式中的条件编译:

View.swift

List {
    // ...
}
.listStyle(#if os(watchOS) PlainListStyle() #else InsetGroupedListStyle() #endif)

解决方法

您可以使用 View 上的扩展程序来实现您想要的。这允许您为所需的操作系统添加 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()
,

使用

  1. 不透明类型
public var myInsetGroupedListStyle: some ListStyle {
  #if os(watchOS)
  PlainListStyle()
  #else
  InsetGroupedListStyle()
  #endif
}
  1. 结束
listStyle( {
  #if os(watchOS)
  PlainListStyle()
  #else
  InsetGroupedListStyle()
  #endif
} () )

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。