【问题标题】:Value of type 'some View' has no member 'if' [closed]“某些视图”类型的值没有成员“如果”[关闭]
【发布时间】:2021-10-22 22:58:23
【问题描述】:

我在 SwiftUI 应用程序中有以下代码块:

struct BtnTxtView: View {
    var theLabel:String
    var highLight: Bool

    var body: some View {
        let crnrRad:CGFloat = 5.0
        Text(theLabel)
            .foregroundColor(.blue)
            .padding(.vertical)
            .font(.largeTitle)
            .if (highLight) { $0
                .cornerRadius(crnrRad)
                .overlay(RoundedRectangle(cornerRadius: crnrRad)
                            .stroke(Color.purple, lineWidth: 4.0))
            }
    }
}

我收到此错误消息:

Value of type 'some View' has no member 'if'

上线:

        .if (highLight) { $0

在另一个项目中使用这种类型的语法没有任何问题,我做了这个测试:

我复制了上面的代码块并把它放在我的另一个项目中并尝试编译。

我绝对没有错误。这是为什么呢?

谁能想到一个可能的原因,为什么我在一种情况下看到错误而不是另一种情况?

【问题讨论】:

  • 在它确实工作的项目中,你有一个View的扩展名包含在一个叫做if的地方——可能是这样的——stackoverflow.com/questions/57467353/…如果你不包括那个扩展,它不会工作,因为它不是 vanilla SwiftUI 的一部分
  • 除了您的问题或答案!为什么这个.if() 修饰符?您可以只使用.overlay 并在那里使用条件。不需要.if()
  • @jnpdx;是的,我检查过,你是对的。
  • @swiftPunk;好的,我需要仔细看看如何使用覆盖。
  • @Michel:绝对不需要那个修饰符,它只是一种输入代码的奇特方式,看看我的答案。

标签: ios swift swiftui swiftui-environment


【解决方案1】:

这里是你需要使用的代码,不需要那个.if()修饰符:

struct BtnTxtView: View {

    var theLabel:String
    var highLight: Bool

    var body: some View {
        
        let crnrRad:CGFloat = 5.0
        
        Text(theLabel)
            .foregroundColor(.blue)
            .padding(.vertical)
            .font(.largeTitle)
            .cornerRadius(highLight ? crnrRad : 0.0)
            .overlay(highLight ? RoundedRectangle(cornerRadius: crnrRad)
                .stroke(Color.purple, lineWidth: 4.0) : nil)
    }
}

【讨论】:

  • 我快速尝试覆盖您的建议。可能是我需要更多地使用它,但我觉得 .if 选项提供了更大的灵活性。我可能错了。此演示中的示例来自我的另一篇文章:github.com/zaxonus/SUI_BtnSwt.git
  • 您的想法并非如此,.overlay() 更好、更简单、更基本。如果您知道它们之间的区别并且在某些情况下可能会更有帮助,则可以使用名为 .if() 的自定义修饰符,但至少您必须同时了解两者。
  • 好的。正确的。那我需要多用一点。谢谢。
  • 事实上,如果您查看我的帖子stackoverflow.com/questions/68871696/button-handling-in-swiftui 中的演示,您可能会对这个主题有一些有趣的评论。
猜你喜欢
  • 2021-12-10
  • 2020-03-30
  • 1970-01-01
  • 2020-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-03
  • 1970-01-01
相关资源
最近更新 更多