枚举中值的含糊用法

时间:2018-08-17 05:52:38

标签: ios swift

我已将swift项目更新为Swift 4.1,突然一些代码显示错误。

您能建议我如何处理这些错误吗?

import Foundation

class HotCase : BaseResponse {

    enum HotCaseStatus : String {
        case New = "New"
        case InProgress = "In Progress"
        case Cancel = "Cancelled"
        case Complete = "Completed"
    }

    var Id: String?
    var STATUS: String?
    var CreateDate: String?
    var UpdateBy: String?
    var TYPE: String?
    var CASENUMBER: String?
    var REASON: String?
    var InternalId: String?
    var ORIGIN: String?
    var SUBJECT: String?
    var DESCRIPTION: String?
    var CLOSEDATE: String?
    var UpdateDate: String?
    var CreateBy: String?
    var ACCOUNTID: String?
    var isGotDetail: Bool = false


    var HotCaseStatus: HotCaseStatus? {
        get {
            if let state = STATUS {
                switch state {
                case HotCaseStatus.New.rawValue :
                    return .New

                case HotCaseStatus.InProgress.rawValue :
                    return .InProgress

                case HotCaseStatus.Cancel.rawValue :
                    return .Cancel

                case HotCaseStatus.Complete.rawValue :
                    return .Complete

                default: ()

                }
            }
            return nil
        }
    }
}

当我尝试以防万一时,我得到了错误显示“ HotCaseStatus”的用法。

谢谢。

2 个答案:

答案 0 :(得分:2)

var hotCaseStatus: HotCaseStatus? {
    get {
        if let state = STATUS {
            switch state {
            case HotCaseStatus.New.rawValue :
                return .New

            case HotCaseStatus.InProgress.rawValue :
                return .InProgress

            case HotCaseStatus.Cancel.rawValue :
                return .Cancel

            case HotCaseStatus.Complete.rawValue :
                return .Complete

            default: ()

            }
        }
        return nil
    }
}

您使用的属性名称与枚举名称相同,因此会出现问题。

答案 1 :(得分:0)

如果您遵循变量名以小写字母开头,结构名和枚举名以大写字母e开头的命名约定,则可以轻松避免此类术语的混淆。

  • 类型为HotCaseStatus
  • 变量名称应该为hotCaseStatus

一个类型和一个类型的实例不能具有相同的名称,即歧义

尽管如此,可以将计算属性的主体简化为

var hotCaseStatus: HotCaseStatus? {
    return HotCaseStatus(rawValue: STATUS ?? "")   
}