【问题标题】:How can you use a conditional statement in a swift method如何在 swift 方法中使用条件语句
【发布时间】:2026-01-11 19:50:01
【问题描述】:

我希望按钮样​​式中的填充是有条件的。如果 buttonstyle 参数说它是一个圆圈,我想要很多填充,如果不是,我只想要一点填充。

我尝试在代码中添加 If 语句,

configuration.label
            .padding(if ButtonShape == "Circle" {
                60
                }else{
                30})

但我收到错误“表达式列表中的预期表达式”

我也尝试过内联。这根本不起作用

.padding((ButtonShape == "Circle"? 60:30))

返回错误: 不能对“字符串”类型的非可选值使用可选链接

预期的 ',' 分隔符

任何帮助将不胜感激。完整代码如下:

struct SimpleButtonStyle: ButtonStyle {
    var ButtonShape: String
    
    
    func makeBody(configuration: Self.Configuration) -> some
        
        
        View {

        configuration.label
            .padding(if ButtonShape == "Circle" {
                60
                }else{
                30})
        .contentShape(Circle())
        .background(
            Group{
                if ButtonShape == "Circle" {
                    if configuration.isPressed{
                        Circle()
                            .fill(Color.offWhite)
                        .overlay(
                            Circle()
                                .stroke(Color.gray, lineWidth: 4)
                                .blur(radius: 4)
                                .offset(x: 2, y: 2)
                                .mask(Circle().fill(LinearGradient(Color.black,Color.clear)))
                            
                        )
                        .overlay(
                            Circle()
                                .stroke(Color.white,lineWidth: 8)
                                .blur(radius: 4)
                                .offset(x: -2, y: -2)
                                .mask(Circle().fill(LinearGradient(Color.clear,Color.black)))
                        
                        )
                    } else {
                        Circle()
                            .fill(Color.offWhite)
                            .shadow(color: Color.black.opacity(0.2), radius: 10, x: 10, y: 10)
                            .shadow(color: Color.white.opacity(0.7), radius: 10, x: -5, y: -5)
                    }
                } else {
                    if configuration.isPressed{
                        Capsule()
                            .fill(Color.offWhite)
                        .overlay(
                            Capsule()
                                .stroke(Color.gray, lineWidth: 4)
                                .blur(radius: 4)
                                .offset(x: 2, y: 2)
                                .mask(Capsule().fill(LinearGradient(Color.black,Color.clear)))
                            
                        )
                        .overlay(
                            Capsule()
                                .stroke(Color.white,lineWidth: 8)
                                .blur(radius: 4)
                                .offset(x: -2, y: -2)
                                .mask(Capsule().fill(LinearGradient(Color.clear,Color.black)))
                        
                        )
                    } else {
                        Capsule()
                            .fill(Color.offWhite)
                            .shadow(color: Color.black.opacity(0.2), radius: 10, x: 10, y: 10)
                            .shadow(color: Color.white.opacity(0.7), radius: 10, x: -5, y: -5)
                    }
                    
                    
                    
                }
            
        })
        
    }
}

【问题讨论】:

  • .padding( ButtonShape == "Circle" ? 60 : 30 ) 应该可以工作

标签: ios swift methods swiftui conditional-statements


【解决方案1】:

您需要在? 运算符之前添加一个空格。如果没有空格,编译器会将其误认为是可选的。

.padding(ButtonShape == "Circle" ? 60:30)

【讨论】:

  • 成功了!为什么没有 .padding((ButtonShape == "Circle"? 60:30))
  • 正如我上面提到的,? 之前没有空格,这意味着您正在尝试使用? 进行可选链接。
  • 我必须记住那个。超级烦人。