2015-06-19 109 views
1

我想做一個hang子手遊戲。我要粘貼我的代碼,因爲我覺得我的問題在這裏,我只是沒有看到。往下看,找到我寫的這個部分,這是錯誤發生的地方。這是我得到的錯誤消息:在調用中缺少參數標籤'arrayLiteral'。當我添加arrayLiteral時,代碼不起作用。我對Swift很陌生,所以一些幫助將非常感謝!謝謝! (遺憾的是,有很多的代碼,這可能是無關的問題)Swift數組(字符串)不工作

import UIKit 

class ViewController: UIViewController, UITextFieldDelegate { 

    @IBOutlet weak var secret_word_label: UILabel! 
    @IBOutlet weak var guess_field: UITextField! 
    @IBOutlet weak var submit_button: UIButton! 

    //only for bug testing 
    @IBOutlet weak var arb_print: UILabel! 
    @IBOutlet weak var print_secret: UILabel! 

    var user_guesses = [String]() 

    var secret_word = "asdf" 

    var wrong_guesses = 0 

    var guess_letter = "" 

    var correct_guesses = 0 

    let limit_wrongs = 3 

    var secret_word_loc = [String]() 


    func return_len(text: String) -> Int { 

     var final = [String]() 

     var loc = Array(text) 

     for letter in loc { 

      if !contains(final, String(letter)) { 

       final.append(String(letter)) 

       } 

     } 

     return final.count 

    } 


    func gen_secret_word() -> String { 

     var random_num = arc4random_uniform(4) 

     var words = ["hello","world","iphone","apple"] 

     return words[Int(random_num)] 

    } 


    func start_game(action: UIAlertAction! = nil) { 

     secret_word = gen_secret_word() 

     print_secret.text = secret_word 

     secret_word_label.text = dashes_except(secret_word,except: "1") 


     THIS IS WHERE THE ERROR OCCURS < 


     secret_word_loc = Array(secret_word) 


     > 
     user_guesses = [String]() 

     correct_guesses = 0 

     wrong_guesses = 0 



    } 


    func dashes_except(word: String,except: String) -> String { 

     var loc = [String]() 

     for (index, character) in enumerate(word) { 

      loc.append(String(character)) 

     } 

     var loc_except = [String]() 

     for (index, character) in enumerate(except) { 

      loc_except.append(String(character)) 

     } 

     for x in 0..<loc.count { 

      if !contains(loc_except, loc[x]) { 

       loc[x] = "-" 

      } 

     } 

     return "".join(loc) 

    } 


    func textFieldShouldReturn(textField: UITextField!) -> Bool { 

     textField.resignFirstResponder() 

     return true 

    } 


    @IBAction func submit_engaged(sender: UIButton) { 

     guess_letter = guess_field.text 

     if contains(user_guesses, guess_letter) { 

      var nuttin = "well nuttin" 

     } 

     else if contains(secret_word_loc, guess_letter) { 

      correct_guesses += 1 

      user_guesses.append(guess_letter) 

     } else { 

      wrong_guesses += 1 

      user_guesses.append(guess_letter) 

     } 



     arb_print.text = "".join(user_guesses) 

     secret_word_label.text = dashes_except(secret_word,except: "".join(user_guesses)) 

     if correct_guesses == return_len(secret_word) { 

      //give alert that they won and then ask for continue to play again and put how many guesses it took them 


      let ac = UIAlertController(title: "You won", message: "Congrats. It took you \(wrong_guesses + correct_guesses) tries", preferredStyle: .Alert) 

      ac.addAction(UIAlertAction(title: "Play Again", style: UIAlertActionStyle.Default, handler: start_game)) 

      presentViewController(ac, animated: true, completion: nil) 


     } 

     else if wrong_guesses == limit_wrongs { 

      //give alert that they lost and then ask for continue to play again and give the word 

      let ac = UIAlertController(title: "You lost", message: "The word was \(secret_word)", preferredStyle: .Alert) 

      ac.addAction(UIAlertAction(title: "Play Again", style: UIAlertActionStyle.Default, handler: start_game)) 

      presentViewController(ac, animated: true, completion: nil) 

     } 









    } 


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

     guess_field.delegate = self 

     start_game() 

    } 


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


} 
+0

它在我看來,他實際上是在試圖製作一個字符數組。將secret_word_loc改成'[Character]'我認爲他正在尋找。 –

回答

1

因爲您宣稱secret_word_locArray<String>類型,並且Array<secret_word>實際上是Array<Character>的一種類型。您可以聲明var secret_word_loc = [Character]()或做secret_word_loc = map("secret_word") {String($0)}這將會將secret_word中的每個字符轉換爲String並將它們放入Array

+0

建議的代碼不僅不能遠程解決askers問題,而且它甚至不會編譯(除非它編譯在Xcode 7上......我只在Xcode 6.3上進行了測試。不管怎樣,但它絕對沒有在那裏工作)。你對這個答案的滿意度如何讓我感到困惑。 – nhgrif

+0

謝謝大家誰留下了答案。 Eric Qian,你的解決方案使用地圖工作。非常感謝你! – jonathanlv7

1

嘗試secret_word_loc = [secret_word]

1

這裏有(至少)兩種可能的解決方案,因爲Array有幾個初始化器。

首先,我們可以使用文字陣列語法,這是簡單地圍繞我們的用逗號分隔的陣列元件纏繞的一對方括號:

secret_word_loc = [secret_word] 

或者,我們可使用更詳細的初始化,這實際上解釋錯誤消息的源:

secret_word_loc = Array(arrayLiteral: secret_word) 

此初始化爲Array接受以逗號分隔的數組元素的列表與實例化的陣列。

這兩種解決方案工作得很好。

第二個解釋的錯誤消息:

缺少參數標籤「arrayLiteral」

它只是告訴你「嘿,一切是正確的,但你必須使用參數標籤,在這種情況下,它是arrayLiteral

但是,第一個解決方案更Swift-esque,我絕對會更喜歡在我維護的任何代碼中看到G。