8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

按钮无法识别 PrimitiveButtonStyle,并且可能在上下文中不可用

Meera K 1月前

26 0

我目前正在学习 SwiftUI,当在 Button 上使用 .buttonStyle 时,在 Xcode 自动完成功能中找不到 .bordered 和 .borderless 等静态属性,如果我强制输入……

我目前正在学习 SwiftUI,不知何故在使用时 .buttonStyle Button 在 Xcode 自动完成中找不到 .bordered 和这样 .borderless 的静态属性

此静态属性在 PrimitiveButtonStyle 上定义,并且可能在此上下文中不可用。

有人知道这是什么原因造成的吗?我找不到与此问题相关的任何讨论。

enter image description here

我尝试用不同的方法重写代码并重新运行 Xcode。

帖子版权声明 1、本帖标题:按钮无法识别 PrimitiveButtonStyle,并且可能在上下文中不可用
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Meera K在本站《xcode》版块原创发布, 转载请注明出处!
最新回复 (0)
  • Jet 1月前 0 只看Ta
    引用 2

    您可以忽略此错误并输入 .bordered 而不使用自动完成建议。 之后,Xcode 将如预期那样成功编译代码且不会出现任何错误。

    Xcode 在这里感到困惑,因为有两个重载 buttonStyle ,它们的签名几乎相同,只是对参数类型的限制不同。( 1 , 2 )

    func buttonStyle<S>(_ style: S) -> some View where S : PrimitiveButtonStyle
    func buttonStyle<S>(_ style: S) -> some View where S : ButtonStyle
    

    当您输入 时, PrimitiveButtonStyle 自动完成功能无法找到 和 的静态成员 ButtonStyle . 而只能找到 ButtonStyle 。因此, bordered borderless 最后 声明的重载 .

    我们可以用一个简单的例子来重现这种行为:

    protocol Foo {
        
    }
    
    protocol Bar {
        
    }
    
    extension Foo {
        static var foo: Foo { fatalError() }
    }
    
    extension Bar {
        static var bar: Bar { fatalError() }
    }
    
    func foo<T: Foo>(_ foo: T) {}
    func foo<T: Bar>(_ foo: T) {}
    
    foo(./* only bar is shown in the autocomplete here */)
    

    如果您真的不想看到“错误”,您可以用 buttonStyle 自己的具有不同名称的修饰符包装现有的修饰符。

    extension View {
        func buttonAppearance<S: PrimitiveButtonStyle>(_ s: S) -> some View {
            buttonStyle(s)
        }
    }
    

    现在输入 .buttonAppearance(.) 在自动完成列表中 PrimitiveButonStyle 为您提供静态成员

  • @Sweeper 是的,忽略并强制输入代码是可行的,但我不确定这是否是一件好事,我担心这可能会在将来导致崩溃错误

  • 您是否尝试过忽略这一点,直接编译代码?代码本身可以正常工作,对吗?这只是 Xcode 的自动完成功能不完善。

返回
作者最近主题: