我正在学习Swift并正在编写一个基本的卡片游戏初始化函数,我想使用一个函数来设置一些套牌。
Swift一直在抱怨我在参数#1中缺少一个参数,但是没有任何参数,我也不想要任何参数。
Game
类如下
class Game
{
// MARK: ** Private vars **
private var gameState: GameState?
private var playerOnTurn: Player?
private var seedCash:Int?
// MARK: ** Public vars **
lazy var players = [Player]()
var chequesDeck:Deck = Deck()
var propertiesDeck:Deck = Deck()
init()
{
self.gameState = .Initialize
self.playerOnTurn = nil // No player on turn when game is initialized
self.seedCash = kInitialSeedCash
}
func setup(numberOfPlayers:Int)
{
// Create decks of properties and cheques
self.propertiesDeck = Deck.createProperties()
self.chequesDeck = Deck.createCheques()
}
}
Deck
类如下
// Deck of cards
// Two deck types in the game - (1) Properties & (2) Cheques
class Deck
{
private var cards:[Card] = [] // Empty Array
// @return: An array of cards
func createProperties() -> [Card]
{
var propertyDeck:[Card] = []
// TODO: - Needs Local JSON reader
let prop1 = Card.init(name:"Cardboard box", value:1)
propertyDeck.append(prop1)
let prop2 = Card.init(name:"Outhouse", value:2)
propertyDeck.append(prop2)
let prop3 = Card.init(name:"Outhouse", value:3)
propertyDeck.append(prop3)
return propertyDeck
}
// @return: An array of cards
func createCheques() -> [Card]
{
var chequeDeck:[Card] = []
// create 2 copies of each card, but skip 1s
for var i:Int = 0; i<=15; i++
{
if (i != 1)
{
let chequeCard = Card.init(name: "Cheque", value: i * 1000)
chequeDeck.append(chequeCard)
}
}
return chequeDeck
}
func addCard()
{
}
func shuffle()
{
}
}
Deck()
是class
func setup() {
var propertiesDeck:Deck = Deck()
// Create property deck
self.propertiesDeck = Deck.createProperties()
}
// Deck.createProperties file
// @return: An array of cards
func createProperties() -> [Card]
{
var propertyDeck:[Card] = []
let prop1 = Card.init(name:"Penthouse", value:1)
propertyDeck.append(prop1)
return propertyDeck
}
但斯威夫特一直在抱怨;
在调用
中缺少参数#1的参数
但是没有任何参数或参数。
也许我做错了什么/傻?
答案 0 :(得分:0)
这个错误通常会说Deck期待一些构造函数参数。你可以发贴你的甲板课程,这样我就可以看看有没有?
还有一些建议。您似乎正在创建Deck变量propertiesDeck
,但随后通过声明createProperties
静态访问Deck.createProperties()
。你不应该打电话给propertiesDeck.createProperties()
吗?另外createProperties
返回一个Card对象的数组,但propertiesDeck
是一个Deck类。
答案 1 :(得分:0)
因为您正在访问这样的函数:
Deck.createProperties()
你可能想要一个静态方法:
static func createProperties() -> [Card] {
...
}
不应该再给你一个错误。
另一种使其有效的方法是在您已定义的createProperties()
上调用Deck
,如下所示(不推荐):
self.propertiesDeck = propertiesDeck.createProperties()
缺少参数的原因来自于方法将类实例作为其第一个参数,因此您实际上可以将其称为Deck.createProperties(propertiesDeck)()
。
我相信你的代码中还有一些其他缺陷,我会尝试为你做一个更好的例子:
struct Card {
let name : String
let value : Int
}
class Deck {
var cards : [Card]
init() {
cards = [
Card(name: "Penthouse", value: 1)
]
}
}
答案 2 :(得分:0)
试试这个,
func createProperties() -> [Card]
{
var propertyDeck:[Card] = []
let prop1 = Card(name:"Penthouse", value:1)
propertyDeck.append(prop1)
return propertyDeck
}
如果这不起作用,则显示Deck和Card类的代码。
答案 3 :(得分:0)
如果没有完整的代码,我们无法回答您的问题。我们需要你的Deck类的代码。
但是你可以尝试类函数......
public class Cards {
class func createProperties() -> [Card]
{
var propertyDeck:[Card] = []
let prop1 = Card.init(name:"Penthouse", value:1)
propertyDeck.append(prop1)
return propertyDeck
}
}
您可以使用以下方式调用该函数:
Cards.createProperties()