枚举中的方法在声明中不需要参数时要求参数
Method in an enum is asking for argument when none required in declaration
这可能是一个糟糕的 n00b 问题,但我终于开始正确地看待 Swift。
想象一下,我有一个代表扑克牌的简单枚举。
在其中我有一个方法 returns Array
of Card
s。
该方法没有参数,但是当我调用它时,自动完成和编译器都声明它需要一个。
备注:
- Rank 和 Suit 是以前定义的结构。
- 是的,我知道 'nested for-loops considered harmful'。稍后我会把它移到 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()
这可能是一个糟糕的 n00b 问题,但我终于开始正确地看待 Swift。
想象一下,我有一个代表扑克牌的简单枚举。
在其中我有一个方法 returns Array
of Card
s。
该方法没有参数,但是当我调用它时,自动完成和编译器都声明它需要一个。
备注:
- Rank 和 Suit 是以前定义的结构。
- 是的,我知道 'nested for-loops considered harmful'。稍后我会把它移到 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()