2014-12-31 2 views
1

В разделе // Действия (строка 16) У меня есть вызов функции, который принимает два аргумента и возвращает две переменные. Когда я написал и протестировал блок кода на Playground, у меня не было ошибок; когда я набрал код в Swift, я получаю сообщение об ошибке: «Дополнительный аргумент в вызове»Сообщение SWIFT «Дополнительный аргумент в вызове» - работает в Playground

Я прочитал много других подобных сообщений за последние 2 часа, и я не верю, что любой из них дает ответ. Я подумал, что, возможно, я пропустил неправильный тип данных, но он должен быть массивом String, и, как я уже упоминал, он отлично работает на Playground, и я следую примерам в электронной книге Swift Programming Language, а также Sams: Teach Yourself Swift. Спасибо за любую помощь!

import UIKit 

class ViewController: UIViewController { 

    // Class variables 
    var deck = ["A", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"] 
    var hand = [String]() 
    var discard = [String]() 

    // Outlets 
    @IBOutlet weak var deckLabel: UILabel! 
    @IBOutlet weak var handLabel: UILabel! 

    // Actions 
    @IBAction func dealHand(sender: UIButton) { 
     var cards = dealHand(deck, hand) // Extra argument in call ERROR 

Строка, указанная выше, где происходит ошибка.

 deck = cards.newDeck 
     hand = cards.newHand 
     deckLabel.text = deck.description 
     handLabel.text = hand.description 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


} 

func dealHand(oldDeck: [String], oldHand: [String]) ->(newDeck: [String], newHand: [String]) 
{ 
    var newDeck = [String]() 
    var newHand = [String]() 
    var tempDeck = oldDeck 
    var tempHand = oldHand 
    var randomCard = 0 

    for deal in 0..<5 
    { 
     randomCard = random() % tempDeck.count 
     tempHand.append(tempDeck[randomCard]) 
     tempDeck.removeAtIndex(randomCard) 
    } 
    newDeck = tempDeck 
    newHand = tempHand 

    return (newDeck, newHand) 
} 

ответ

1

Изменить название вашей dealHand функции:

func dealNewHand(oldDeck: [String], oldHand: [String]) -> (newDeck: [String], newHand: [String]) 

И призыв:

var cards = dealNewHand(deck, hand) 

Компилятор кажется спутать, потому что ваш IBAction имел такое же имя функции.

+1

Ahhh, очень тонкий, но это было; хороший глаз, Мехди. Я заменил IBAction на кнопку, и все работает отлично. Ваш быстрый/точный ответ очень ценится! – MickDanger

0

У вас есть два метода, которые выглядят почти такими же. Это смущает.

@IBAction func dealHand(sender: UIButton) 

И

func dealHand(oldDeck: [String], oldHand: [String]) ->(newDeck: [String], newHand: [String]) 

Изменить кто, надеюсь, что это будет.

+0

Спасибо, Рашад. Кнопка была просто для тестирования, поэтому я не думал об этом. Оцените ответ. – MickDanger

Смежные вопросы