2视图控制器之间的Swift通过数据字符串列表
问题描述:
我有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()
答
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
}
...
}
你是什么意思,你不能传递数据?你是否有编译时或运行时错误?请具体解释什么不起作用。 –
当我编译我有这个错误:从私人有效的用户设置阅读。 致命错误:索引超出范围 –