枚举中的方法在声明中不需要参数时要求参数

Method in an enum is asking for argument when none required in declaration

这可能是一个糟糕的 n00b 问题,但我终于开始正确地看待 Swift。 想象一下,我有一个代表扑克牌的简单枚举。 在其中我有一个方法 returns Array of Cards。 该方法没有参数,但是当我调用它时,自动完成和编译器都声明它需要一个。

备注:

代码:

struct Card {
  var rank: Rank
  var suit: Suit

  init(rank: Rank, suit: Suit) {
    self.rank = rank
    self.suit = suit
  }

  //internal version
  func deckOfCards() -> [Card] {
    var deck = [Card]()
    for suit in Suit.allSuits {
      for rank in Rank.allRanks {
        deck.append(Card(rank: rank, suit: suit))
      }
    }
    return deck
  }
}

//external version
func deckOfCards() -> [Card] {
  var deck = [Card]()
  for suit in Suit.allSuits {
    for rank in Rank.allRanks {
      deck.append(Card(rank: rank, suit: suit))
    }
  }
  return deck
}

let externalDeck = deckOfCards()
let internalDeck = Card.deckOfCards() //this has the compiler error: Missing argument for parameter #1

Card.deckOfCards() 不是通过结构的实例访问的,这意味着它应该是结构级别的函数。结构级函数使用 static 关键字定义。

struct Card {
    static func deckOfCards() -> [Card] {
        var deck = [Card]()

        return deck
    }
}

let internalDeck = Card.deckOfCards()

如果没有 static 关键字,函数只能通过结构的实例访问。

struct Card {

    func anotherDeck() -> [Card] {
        var deck = [Card]()

        return deck
    }
}

let externalDeck = Card()
externalDeck.anotherDeck()