如何在 SwiftUI 中遵守 ShapeStyle 协议?

use*_*ser 6 swiftui

我希望符合 ShapeStyle,目标只是符合 ShapeStyle(仅此而已)。

这是我的代码和问题:

struct MyContentView: View {
    var body: some View {
        Circle()
            .fill(RedView())
    }
}

struct RedView: View {
    var body: some View {
        Color.red
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我知道我可以直接使用Color.red而不是视图,但正如我所说,这个问题的目标是符合 ShapeStyle。对于那些要分享有关 ShapeStyle 的苹果开发人员链接的人,我不得不说我以前去过那里。

错误:

实例方法“fill(_:style:)”要求“RedView”符合“ShapeStyle”

Asp*_*eri 9

免责声明: 以下仅用于演示,因为所有使用的 API 都是私有的(按照惯例,而不是设计),因此如果您将带有此类代码的应用程序提交到 AppStore,Apple 的反应是不可预测的。

注意:由于使用的接口是私有的,因此可以在任何新版本中进行更改。

主要部分:

  public func _apply(to shape: inout SwiftUI._ShapeStyle_Shape) {
    Color.red._apply(to: &shape)  // << here !!
  }
Run Code Online (Sandbox Code Playgroud)

在 Xcode 13.3 / iOS 15.4 上给出

演示

完整的发现和代码在这里


Eil*_*lon 6

iOS 17+

ShapeStyle您现在可以通过实现该方法来符合本机要求resolve(in:)

struct RedShapeStyle: ShapeStyle {
    func resolve(in environment: EnvironmentValues) -> some ShapeStyle {
        Color.red
    }
}
Run Code Online (Sandbox Code Playgroud)