2017-09-23 2 views
-3

두 플레이 : - 플레이어 이름 넣기 : - 게임 플레이 전용입니다.스위프트 패스 데이터 2 ViewController 문자열 목록

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에있는 요소 수만 사용할 수 있습니다 (변수 이름에 더 낮은 camelCase 인 Swift 명명 규칙을 따르고 따라서 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 
    } 
    ... 
}