gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 07:12:32 27 4
gpt4 key购买 nike

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

注意事项:

  • Rank 和 Suit 是之前定义的结构。
  • 是的,我知道“嵌套的 for 循环被认为是有害的”。稍后我会将其移动到 map/reduce...
  • 这是在 playground 文件中运行。

代码:

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()

关于swift - 枚举中的方法在声明中不需要参数时要求参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27825168/

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