Enums Swift:';等级没有名为'的成员;简单描述';?

Enums Swift:';等级没有名为'的成员;简单描述';?,enums,switch-statement,swift,optional,Enums,Switch Statement,Swift,Optional,我在下面的代码行中不断遇到错误: let rank1desc = rank1Conv.simpleDescription(); let rank2desc = rank2Conv.simpleDescription(); 声明“Rank”没有名为“simpleDescription”的成员。我觉得这很奇怪,因为我根据苹果的教程写了这段代码,还没有实现和可选的排名?这表明我有。我很想知道为什么它会给我这个错误,如果真的存在的话,这个选项是从哪里来的。非常感谢你 这是我的密码: enum Rank

我在下面的代码行中不断遇到错误:

let rank1desc = rank1Conv.simpleDescription();
let rank2desc = rank2Conv.simpleDescription();
声明“Rank”没有名为“simpleDescription”的成员。我觉得这很奇怪,因为我根据苹果的教程写了这段代码,还没有实现和可选的排名?这表明我有。我很想知道为什么它会给我这个错误,如果真的存在的话,这个选项是从哪里来的。非常感谢你

这是我的密码:

enum Rank: Int{
   case Ace = 1;
   case Two = 2, Three = 3, Four = 4, Five = 5, Six = 6, Seven = 7, Eight = 8, Nine = 9, Ten = 10;
   case Jack = 11, Queen = 12, King = 13;

   func simpleDescription() -> String{
       switch self{
       case .Ace:
           return "Ace";
       case .Jack:
           return "Jack";
       case .Queen:
           return "Queen";
       case .King:
           return "King";
       default:
           return String(self.toRaw())
       }
   }
}

let ace = Rank.Ace;
let aceRawValue = ace.toRaw();

 func compRank(rank1: Int, rank2: Int) -> String{
    let rank1Conv = Rank.fromRaw(rank1);
    let rank2Conv = Rank.fromRaw(rank2)
    let rank1desc = rank1Conv.simpleDescription();
    let rank2desc = rank2Conv.simpleDescription();

    if(rank1 > rank2){
        return rank1desc;
    }
    else if(rank2>rank1){
        return rank2desc;
    }
    else{
       return "They are equal";
    }
}

compRank(rank1: 3, rank2: 2);

问题在于,
fromRaw
不会生成
,而是
秩?
(可选的
simpleDescription
Rank
的一部分,而不是
Rank?
。您需要从中提取
Rank
值(并测试是否存在值),以便访问
simpleDescription

如果您可以保证始终使用有效值调用
compRank
,则修复代码的最简单方法是替换以下行:

    let rank1Conv = Rank.fromRaw(rank1);
    let rank2Conv = Rank.fromRaw(rank2)
……关于这一点:

    let rank1Conv:Rank! = Rank.fromRaw(rank1)
    let rank2Conv:Rank! = Rank.fromRaw(rank2)
告诉编译器
rank1Conv
(和
rank2Conv
)的类型是可选的,但您保证它确实包含一个值。然后,编译器将允许您将其视为
Rank
,并根据需要隐式提取值


然而,这是在破坏你通过期权获得的安全性。例如,如果使用值(999888)调用该方法,则
fromRaw
返回的可选值将为
nil
,如果尝试使用这些值,将导致运行时错误。你应该重新设计这个方法,以便更好地利用optionals,我现在太累了,不能这么做。

@JonathanO'Farrell:没问题!