属性定义推断类型“some View”,涉及另一个声明的“some”返回类型

tra*_* tw 6 swiftui

当我更新到 xcode 13 beta 4 时它不起作用。

显示错误:

属性定义推断类型“some View”,涉及另一个声明的“some”返回类型

struct RatingToStar : View {
    var rating: Int
    let star = Image(systemName: "star").foregroundColor(.yellow)
    let fillStar = Image(systemName: "star.fill").foregroundColor(.yellow)

    var body: some View {
        HStack {
            if rating >= 1 {fillStar}else{star}
            if rating >= 2 {fillStar}else{star}
            if rating >= 3 {fillStar}else{star}
            if rating >= 4 {fillStar}else{star}
            if rating >= 5 {fillStar}else{star}
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Ant*_*ber 6

您也可以通过指定类型来修复它 some View

let star : some View = Image(systemName: "star").foregroundColor(.yellow)
Run Code Online (Sandbox Code Playgroud)


kon*_*iki 5

在 beta 4 中,视图修饰符的返回类型已被清理和制作some View。发行说明是这样说的:

视图修饰符方法返回不透明视图(某些视图)而不是复杂的泛型类型。(46140669)

这就是导致行为改变的原因。目前我无法对错误消息给出完整的解释,因为我对此并不完全有信心,但我可以给你一个简单的解决方法:

struct RatingToSta : View {
    var rating: Int

    let star = AnyView(Image(systemName: "star").foregroundColor(.yellow))
    let fillStar = AnyView(Image(systemName: "star.fill").foregroundColor(.yellow))

    var body: some View {
        HStack {
            if rating >= 1 { fillStar } else{ star }
            if rating >= 2 { fillStar } else{ star }
            if rating >= 3 { fillStar } else{ star }
            if rating >= 4 { fillStar } else{ star }
            if rating >= 5 { fillStar } else{ star }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我发现更多,我一定会回来更新我的答案。