iOS Swift 自定义enum 类型

10 篇文章 0 订阅

在开发中我们经常会使用enum来枚举不同的状态。

举个例子,在测试登录服务器的时候,可能会有多中权限的账号存在,比如管理员、普通用户、开发者等,我们可以用一个enum来表示他们

enum Enum_Account{
    case Adminstrator
    case User
    case Developer
}

假如我需要对每一种状态,返回固定的中文显示的String,最常规的方法可能就类似下面

func getAccountAuth(accont:Enum_Account)-> String{
    switch status{
        case: .Adminstrator
            return "管理员"
        case: .User
            return "普通用户"
        case: .Developer
            return "开发者"
    }
}

当然除此之外还有更好的办法,Swift原生就支持对enum指定一个类型

enum Enum_Account : String {
    case Adminstrator = "管理员"
    case User = "普通用户"
    case Developer = "开发者"
}

那我们使用的时候,就直接可以通过 Enum_Account.rawValue取到上面的String值
但是这种方法有一个局限性,就是只能对enum指定一个类型,而且对enum指定的类型只能是字面量类,例如,如果把enum 的类型设置为UIColor:

enum Enum_Color:UIColor {

}

此时会提示错误:
Raw Raw type 'UIColor' is not expressible by any literal

这个时候我们可以使用extension解决这个问题,我们可能常常会为一个class做extension, 其实enum也可以做extension!

enum Enum_Common_Color {

    case Login_background

    case Negative_Text

    case Positive_Text

}


extension  Enum_Common_Color{

    var color:UIColor{

    switch self {

        case .Login_background:

            return UIColor(red: 57/255.0, green: 60/255.0, blue: 69/255.0, alpha: 1.0)

        case .Negative_Text:

            return UIColor(red: 0x19/255.0, green: 0x7F/255.0, blue: 0xBF/255.0, alpha: 1.0)

        case .Positive_Text:

            return UIColor(red: 0xF7/255.0, green: 0x44/255.0, blue: 0x44/255.0, alpha: 1.0)

/*default:

return UIColor.blue*/

        }

    }

}

那我们要获取状态对应颜色的时候,只需要通过Enum_Common_Color.Login_background.color这样的方式就可以获取颜色啦!

使用SwiftUI自定义iOS分段控件可以通过以下步骤实现: 1. 创建一个新的SwiftUI View,命名为SegmentedControl。 2. 在SegmentedControl中定义一个枚举类型,用于表示分段控件中的选项。 3. 在SegmentedControl中定义一个@Binding属性用于绑定选中的选项。 4. 在SegmentedControl中使用ForEach循环遍历所有的选项,并将它们显示在分段控件中。 5. 在ForEach循环中,使用Button显示每一个选项,并在按钮的action中更新选中的选项。 6. 为分段控件添加样式,例如设置选中的选项的背景色和字体颜色等。 下面是一个简单的示例代码: ```swift enum SegmentedOption: String, CaseIterable { case option1 case option2 case option3 } struct SegmentedControl: View { @Binding var selectedOption: SegmentedOption var body: some View { HStack { ForEach(SegmentedOption.allCases, id: \.self) { option in Button(action: { self.selectedOption = option }) { Text(option.rawValue) .foregroundColor(self.selectedOption == option ? .white : .black) .padding(.horizontal, 20) .padding(.vertical, 10) .background(self.selectedOption == option ? Color.blue : Color.gray) .cornerRadius(10) } } } } } ``` 在使用时,只需要将SegmentedControl添加到需要显示的View中,并将选中的选项绑定到某个属性即可。例如: ```swift struct ContentView: View { @State private var selectedOption: SegmentedOption = .option1 var body: some View { VStack { SegmentedControl(selectedOption: $selectedOption) Text("Selected option: \(selectedOption.rawValue)") } } } ``` 这样就可以在界面上显示一个自定义iOS分段控件了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值