iOS 上的 .listStyle() 和可重用组件中的 WatchOS 不同?
Different .listStyle() on iOS and WatchOS in a reusable component?
我很想在 iOS 和 WatchOS 之间重复使用列表布局,但是 InsetGroupedListStyle()
在 WatchOS 上不可用。
创建一个有条件地 return InsetGroupedListStyle()
on iOS 的助手的好方法是什么,例如。 PlainListStyle()
在 WatchOS 上?
我试过了,但是得到了一个我不能 return 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
修饰符和您想要的 OS 所需的参数。
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: some ListStyle {
#if os(watchOS)
PlainListStyle()
#else
InsetGroupedListStyle()
#endif
}
- 闭包
listStyle( {
#if os(watchOS)
PlainListStyle()
#else
InsetGroupedListStyle()
#endif
} () )
我很想在 iOS 和 WatchOS 之间重复使用列表布局,但是 InsetGroupedListStyle()
在 WatchOS 上不可用。
创建一个有条件地 return InsetGroupedListStyle()
on iOS 的助手的好方法是什么,例如。 PlainListStyle()
在 WatchOS 上?
我试过了,但是得到了一个我不能 return 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
修饰符和您想要的 OS 所需的参数。
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: some ListStyle {
#if os(watchOS)
PlainListStyle()
#else
InsetGroupedListStyle()
#endif
}
- 闭包
listStyle( {
#if os(watchOS)
PlainListStyle()
#else
InsetGroupedListStyle()
#endif
} () )