Swift 在 2 之间传递数据 ViewController 字符串列表
Swift Pass Data Between 2 ViewController List of String
我有两个观点:
-一个用于放置玩家的名字
- 一个玩游戏。
但我不能不传递列表中的名称数据
当我编译时出现这个错误:
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
s 文本 属性 时,您应该使用可选绑定来解包值,然后检查文本是否为空。也不需要 numberOfPlayer
变量,您可以只使用 players
中的元素数量(请遵守 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
}
...
}
我有两个观点: -一个用于放置玩家的名字 - 一个玩游戏。 但我不能不传递列表中的名称数据
当我编译时出现这个错误:
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
s 文本 属性 时,您应该使用可选绑定来解包值,然后检查文本是否为空。也不需要 numberOfPlayer
变量,您可以只使用 players
中的元素数量(请遵守 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
}
...
}