Button 初始化自定义按钮快捷界面

Button 初始化自定义按钮快捷界面,button,enums,swiftui,init,Button,Enums,Swiftui,Init,正在尝试初始化CustomButton(标题:“添加”,图标:。添加,状态:。启用) 我的代码如下。我确实得到了标题,但枚举不起作用 加接收错误 无法将“Image”类型的值转换为预期的参数类型“String” at图像(图标) 我想你想要这个 struct CustomButton: View { var title: String var icon: Icon var status: Color var body: some View {

正在尝试初始化CustomButton(标题:“添加”,图标:。添加,状态:。启用)

我的代码如下。我确实得到了标题,但枚举不起作用

加接收错误

无法将“Image”类型的值转换为预期的参数类型“String”

at图像(图标)


我想你想要这个

struct CustomButton: View {
       var title: String
       var icon: Icon
       var status: Color

    var body: some View {
        Button(action: {

        }) {
            Text(title)
                .foregroundColor(.white)
                .background(Color(.green))
                .font(Font.custom("SFCompactDisplay", size: 14))

            icon.image
                .renderingMode(.original)
                .foregroundColor(.white)
        }
    }

    enum Icon {
        case add
        case edit

        var image: Image {
            switch self {
            case .add:
                return Image("Add")
            case .edit:
                return Image("Edit")
            }
        }
    }

    enum Status {
        case enable
        case disable

        var color : Color {
            switch self {
            case .enable:
                return Color(.green)
            case .disable:
                return Color(.gray)
            }
        }
    }

    init(title: String, icon: Icon, status: Status) {
        self.title = title
        self.icon = icon
        self.status = status.color
    }
}

我想出来了。现在可以了

struct CustomButton: View {
    let title: String
    let icon : String
    let status: Color
    @State private var buttonDisabled = true
    
    var body: some View {
        Button(action: {
            
        }) {
            ZStack(alignment:.bottom) {
                HStack {
                        Text(title)
                            .foregroundColor(.white)
                             .font(Font.custom("SFCompactDisplay-Bold", size: 20))
                            .bold()
                            .fontWeight(.bold)
                            .background(status)
                        Image(icon)
                            .renderingMode(.original)
                            .foregroundColor(.white)
                            .background(Color(.white))
                }
                .frame(width: 335, height: 20, alignment: .center)
                .padding()
                .background(status)
            }
        .cornerRadius(10)
           
        }
    }
    
    enum Icon {
        case add
        case edit
        case none
        
        var image: String {
            switch self {
            case .add:
                return "Add"
            case .edit:
                return "Edit"
            case .none:
                return "empty"
            }
        }
    }

    enum Status {
        case enable
        case disable
    }
    
    init(title: String, icon: Icon, status: Status) {
        self.title = title
        self.icon = icon.image
        if status == .enable {
            self.status = Color(#colorLiteral(red: 0, green: 0.6588235294, blue: 0.5254901961, alpha: 1))
        } else {
            self.status = Color(#colorLiteral(red: 0.501960814, green: 0.501960814, blue: 0.501960814, alpha: 1))
        }
        
    }
}

struct CustomButton_Previews: PreviewProvider {
    static var previews: some View {
        CustomButton(title: "Odeme Yontemi Ekle", icon: .none, status: .enable)
    }
}

“var status:Color”替换为使用Xcode 11.7测试的“var status:status”-效果很好,我只使用了
图像(systemName:“plus”)
,因为我没有您的资源systemName可以工作,但我需要我的图标enum与init一起工作。我使用它而不是
图像(“添加”)
而不是enum。也许您的资产中没有名为“添加”的图像?
struct CustomButton: View {
    let title: String
    let icon : String
    let status: Color
    @State private var buttonDisabled = true
    
    var body: some View {
        Button(action: {
            
        }) {
            ZStack(alignment:.bottom) {
                HStack {
                        Text(title)
                            .foregroundColor(.white)
                             .font(Font.custom("SFCompactDisplay-Bold", size: 20))
                            .bold()
                            .fontWeight(.bold)
                            .background(status)
                        Image(icon)
                            .renderingMode(.original)
                            .foregroundColor(.white)
                            .background(Color(.white))
                }
                .frame(width: 335, height: 20, alignment: .center)
                .padding()
                .background(status)
            }
        .cornerRadius(10)
           
        }
    }
    
    enum Icon {
        case add
        case edit
        case none
        
        var image: String {
            switch self {
            case .add:
                return "Add"
            case .edit:
                return "Edit"
            case .none:
                return "empty"
            }
        }
    }

    enum Status {
        case enable
        case disable
    }
    
    init(title: String, icon: Icon, status: Status) {
        self.title = title
        self.icon = icon.image
        if status == .enable {
            self.status = Color(#colorLiteral(red: 0, green: 0.6588235294, blue: 0.5254901961, alpha: 1))
        } else {
            self.status = Color(#colorLiteral(red: 0.501960814, green: 0.501960814, blue: 0.501960814, alpha: 1))
        }
        
    }
}

struct CustomButton_Previews: PreviewProvider {
    static var previews: some View {
        CustomButton(title: "Odeme Yontemi Ekle", icon: .none, status: .enable)
    }
}