Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Struct swift如何使用枚举作为构造结构的参数?_Struct_Enums_Swift - Fatal编程技术网

Struct swift如何使用枚举作为构造结构的参数?

Struct swift如何使用枚举作为构造结构的参数?,struct,enums,swift,Struct,Enums,Swift,我正在做一个关于Swift编程书的实验,并坚持在结构本身内部构造一个结构。但报告的错误参数已展开。我如何将它的值作为参数 struct Card { var rank: Rank var suit: Suit func simpleDescription() -> String { return "The \(rank.simpleDescription()) of \(suit.simpleDescription())" } fun

我正在做一个关于Swift编程书的实验,并坚持在结构本身内部构造一个结构。但报告的错误参数已展开。我如何将它的值作为参数

struct Card {
    var rank: Rank
    var suit: Suit
    func simpleDescription() -> String {
        return "The \(rank.simpleDescription()) of \(suit.simpleDescription())"
    }
    func FullDeck() -> Card[] {
        var deck: Card[]
        for i in 1...13
        {
            for j in 0...3
            {
                let rank_para = Rank.fromRaw(i)
                let suit_para = Suit.fromRaw(j)


                **deck.append(Card(rank: rank_para, suit : suit_para ))
                //value of optional type unwrapped;did you mean to use ? or !**

            }
        }
        return deck
    }
}




enum Rank: Int {
    case Ace = 1
    case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten
    case Jack, Queen, King
    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())
        }
    }
    func compare(sec:Rank) -> Bool {
        var first = 0
        var second = 0
        if self.toRaw() == 1 {
            first = 1
        } else {
            first = self.toRaw()
        }
        if sec.toRaw() == 1 {
            second = 1
        } else {
            second = self.toRaw()
        }
        return first > second
    }
}


enum Suit: Int{
    case Spades = 0
    case Hearts, Diamonds, Clubs
    func simpleDescription() -> String {
        switch self {
        case .Spades:
            return "spades"
        case .Hearts:
            return "hearts"
        case .Diamonds:
            return "diamonds"
        case .Clubs:
            return "clubs"
        }
    }
}

fromRaw
方法返回一个可选值:
Rank?
Suit?
。这意味着该值可能为零。您需要检查以下各项:

if let aRank = rank_para {
    if let aSuit = suit_para {
        deck.append(Card(rank: aRank, suit: aSuit))
    }
}
通过使用“if let”,可以将可选值“展开”为不再可选(不能为零)的值(aRank和aSuit)

另一种方法是:
在这里,您正在检查排名和西装是否为零。如果两者都不是,则使用
调用append和“unwrap”可选值<代码>
表示如果值为
nil
将抛出运行时错误,否则,请将此变量视为不可能为
nil

非常感谢您为我解释可选值及其展开。现在可以用了。:)
if rank_para and suit_para {
    deck.append(Card(rank: rank_para!, suit: suit_para!))
}