在SwiftUI中,我有两种包装Shape的结构,一种有效,一种没有,但我看不出两者的功能差异

问题描述

我包装了两个Shape结构。一种有效,另一种可以编译并运行-但始终在屏幕上呈现空白区域。但是,我没有看到这两种结构在功能上有任何主要区别……<IfModule mod_headers.c> Header set Access-Control-Allow-Origin "*" Header set Access-Control-Allow-Headers "Origin,X-Requested-With,Content-Type,Accept" </IfModule> 有何不同之处,可防止其将形状呈现为视图?

AnyShape_AlwaysBlank

解决方法

在第一种情况下,当调用path(in rect: CGRect) -> Path时,它实际上使用传递的rect来创建Path

在第二种情况下,您使用Path(它是一个空的CGRect())创建了CGRect,因此返回的路径是适合于空{{1} }。然后,在调用rect时,您将忽略path(in rect: CGRect) -> Path参数,而只返回预先创建的rect


另一种方法是使结构通用,然后存储Path

Shape

注意::如果您想使用struct AnyShape<S: Shape>: Shape { private let someShape: S // required to conform to Shape public func path(in rect: CGRect) -> Path { someShape.path(in: rect) } init(_ someShape: S) { self.someShape = someShape } } 将所有AnyShape统一为一个类型,则此 Generic 版本不会这样做是因为它为每种输入形状返回了不同的类型:Shape的{​​{1}},AnyShape<Circle>的{​​{1}}等。在这种情况下,我会坚持使用Circle使用闭包来捕获AnyShape<Rectangle>,或者如果您希望从函数返回多个Rectangle类型,则可以将AnyShape设为Shape