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