枚举中的方法是在声明中没有要求时请求参数

时间:2015-01-07 17:32:59

标签: swift swift-playground

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

注意:

  • Rank和Suit是以前定义的结构。
  • 是的,我知道'嵌套for循环被认为是有害的'我将它移动到以后映射/缩小...
  • 这是在游乐场文件中运行。

代码:

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

1 个答案:

答案 0 :(得分:1)

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

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

        return deck
    }
}

let internalDeck = Card.deckOfCards()

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

struct Card {

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

        return deck
    }
}

let externalDeck = Card()
externalDeck.anotherDeck()