Swift - 没有带参数的函数,返回值为

时间:2015-12-07 14:48:24

标签: swift function return-value

我正在学习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的参数

但是没有任何参数或参数。

也许我做错了什么/傻?

4 个答案:

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