gpt4 book ai didi

enums - swift : 'Rank? does not have a member named ' simpleDescription'?

转载 作者:搜寻专家 更新时间:2023-10-31 22:23:55 27 4
gpt4 key购买 nike

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

let rank1desc = rank1Conv.simpleDescription();
let rank2desc = rank2Conv.simpleDescription();

声称“等级?”没有名为“simpleDescription”的成员。我觉得这很奇怪,因为我根据 Apple 的教程编写了这段代码,并且没有像 Rank 一样在任何地方实现和可选?暗示我有。我很想知道为什么它会给我这个错误,如果确实存在的话,可选的是从哪里来的。非常感谢!

这是我的代码:

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 不生成 Rank,而是生成 Rank?(可选类型 Rank)。 simpleDescriptionRank 的一部分,而不是 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(和 rank2Con​​v)的类型是可选的,但您要保证它确实如此确实包含一个值。然后,编译器会让您将其视为 Rank 并根据需要隐式提取值。

但是,这破坏了您使用可选值获得的安全性。例如,如果使用值 (999,888) 调用该方法,则 fromRaw 返回的可选值将为 nil,如果您尝试使用它会导致运行时错误他们。您应该重新设计此方法以更正确地利用可选值,我现在太累了,无法这样做。

关于enums - swift : 'Rank? does not have a member named ' simpleDescription'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24226479/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com