2017-09-23 59 views
-3

我有2個視圖: - 一個用於放置玩家名稱 - 一個用於玩遊戲的一個。 但我不能不能通過名稱的數據列表中的2視圖控制器之間的Swift通過數據字符串列表

我編譯時有此錯誤:

fatal error: Index out of range

//ViewController.swift 

    if(segue.identifier == "segue"){ 
     let secondView = segue.destination as! PlayViewController 

     var numberOfPlayer = 0 

     if(n1.text?.isEmpty == false){ 
      secondView.Player[0] = n1.text! 
      numberOfPlayer += 1 
     } 
     if(n2.text?.isEmpty == false){ 
      secondView.Player[1] = n2.text! 
      numberOfPlayer += 1 
     } 
     if(n3.text?.isEmpty == false){ 
      secondView.Player[2] = n3.text! 
      numberOfPlayer += 1 
     } 
     secondView.nbPlayer = numberOfPlayer 
    } 
} 

_

//PlayViewController 
class PlayViewController: UIViewController { 

var Player = [String]() 
var nbPlayer = Int() 
+1

你是什麼意思,你不能傳遞數據?你是否有編譯時或運行時錯誤?請具體解釋什麼不起作用。 –

+0

當我編譯我有這個錯誤:從私人有效的用戶設置閱讀。 致命錯誤:索引超出範圍 –

回答

0

PlayViewController.Player被初始化爲空數組,因此當您試圖通過索引訪問其元素時出錯。您必須使用默認值初始化數組達到特定的長度,或者您必須使用append將元素插入數組,而不是通過索引來賦值。

此外,在訪問UITextField的文本屬性時,應該使用可選綁定來打開值,然後檢查文本是否爲空。也不需要numberOfPlayer變量,您可以使用players中的元素數量(請遵守Swift命名約定,該變量名稱爲lower-camelCase,因此將Player重命名爲players)。

//ViewController.swift 
if(segue.identifier == "segue"){ 
    let secondView = segue.destination as! PlayViewController 

    if let text1 = n1.text, !text1.isEmpty { 
     secondView.players.append(text1) 
    } 
    if let text2 = n2.text, !text2.isEmpty { 
     secondView.players.append(text2) 
    } 
    if let text3 = n3.text, !text3.isEmpty { 
     secondView.players.append(text3) 
    } 
    secondView.nbPlayer = secondView.players.count 
} 

它可能是一個更好的解決方案以初始化nbPlayer作爲計算的屬性,所以它總是反映players數組中的元素數目。或者說,你甚至不應該把這個號碼存儲在一個單獨的變量中,只需要訪問players.count就可以訪問它。

//PlayViewController 
class PlayViewController: UIViewController { 
    var players = [String]() 
    var nbPlayer:Int { 
     return players.count 
    } 
    ... 
} 
相關問題