【发布时间】:2022-01-02 11:08:38
【问题描述】:
我有一个带有两个相似初始化块的 SwiftUI 视图。它们之间唯一不同的是 Optional 属性的类型(具有默认值)。因为它是可选的,所以当我调用没有它的视图时,我得到一个Ambiguous use of 'init' 错误。
我希望第一个 init 成为 View 的默认初始化程序。
它是这样的:
struct NewView: View {
var a: String
var b: String
var c: AnyShapeStyle
var d: String
init(a: String,
b: String,
c: LinearGradient = LinearGradient(gradient: Gradient(colors: [Color.green, Color.blue]), startPoint: .top, endPoint: .bottom),
d: String = "Linear") {
self.a = a
self.b = a
self.c = AnyShapeStyle(c)
self.d = d
}
init(a: String,
b: String,
c: AngularGradient = AngularGradient(colors: [.green, .blue], center: .center),
d: String = "Angular") {
self.a = a
self.b = a
self.c = AnyShapeStyle(c)
self.d = d
}
...
}
因此像这样调用视图会给我错误:
NewView(a: "a", b: "b")
【问题讨论】:
-
用 AngularGradient 为 c 调用单元,然后用字符串“Linear”为 d 调用单元会是什么结果?
-
那么你希望什么时候调用另一个初始化器?具体来说,您希望何时使用默认值
AngularGradient(colors: [.green, .blue], center: .center)? -
@Fogmeister d 的字符串无关紧要我只是展示了一个包含两个必需属性和两个具有默认值的属性的示例
-
@Sweeper 我希望能够用线性渐变或角度渐变填充视图。因此,默认情况下,我将填充设置为线性渐变,但视图可以使用自定义线性或角度渐变填充。