Arrays 使用Swift进行数组追加时出现意外错误 var-playerArray:Array=[] var currentPerson=1 var current=1 var currentRoom=1 var currentPlayer=1 currentPerson=everyPicker.SelectedRowUncomponent(0) 当前武器=everyPicker.SelectedRowUncomponent(1) currentRoom=everyPicker.SelectedRowUncomponent(2) currentPlayer=playerPicker.SelectedRowUncomponent(0) //在if语句中 将(当前房间、当前人员、当前武器)附加为(Int、Int、Int) //错误元组类型()和(Int,Int,Int)有不同数量的元素(0和3)
即使我去掉as int,int,int,仍然有一个错误,我不知道为什么会发生这种情况。如果我拿走它,就会出现访问协议“int”的成员的错误。未实现。您没有关闭Arrays 使用Swift进行数组追加时出现意外错误 var-playerArray:Array=[] var currentPerson=1 var current=1 var currentRoom=1 var currentPlayer=1 currentPerson=everyPicker.SelectedRowUncomponent(0) 当前武器=everyPicker.SelectedRowUncomponent(1) currentRoom=everyPicker.SelectedRowUncomponent(2) currentPlayer=playerPicker.SelectedRowUncomponent(0) //在if语句中 将(当前房间、当前人员、当前武器)附加为(Int、Int、Int) //错误元组类型()和(Int,Int,Int)有不同数量的元素(0和3),arrays,swift,xcode6,Arrays,Swift,Xcode6,即使我去掉as int,int,int,仍然有一个错误,我不知道为什么会发生这种情况。如果我拿走它,就会出现访问协议“int”的成员的错误。未实现。您没有关闭append调用的括号 但是,因为swift知道数组是一个3整数的数组。您只需将3个变量传递给append方法,如下所示: var playerOneArray : Array<(Int,Int,Int)> = [] var currentPerson = 1 var currentWeapon = 1
append
调用的括号
但是,因为swift知道数组是一个3整数的数组。您只需将3个变量传递给append方法,如下所示:
var playerOneArray : Array<(Int,Int,Int)> = []
var currentPerson = 1
var currentWeapon = 1
var currentRoom = 1
var currentPlayer = 1
currentPerson = everyPicker.selectedRowInComponent(0)
currentWeapon = everyPicker.selectedRowInComponent(1)
currentRoom = everyPicker.selectedRowInComponent(2)
currentPlayer = playerPicker.selectedRowInComponent(0)
//In an if statement
playerOneArray.append(currentRoom, currentPerson, currentWeapon) as (Int,Int,Int)
// Error tuple types () and (Int,Int,Int) have a different number of elements (0 vs. 3)
假设(currentRoom、currentPerson、currentWearm)是一个Int值的元组。这将把(currentRoom、currentPerson、Current武器)存储到PlayerArray[0]中
作为补充说明,您似乎需要一组保存每个玩家详细信息的玩家。如果是这种情况,您应该将
playerArray
重命名为players
,只需添加每个玩家的信息即可。这样,每个索引将表示玩家信息(整数的元组)。您的想法是正确的,但语法不正确
Swift正在寻找一种带有签名的方法:
playerOneArray.append(currentRoom, currentPerson, currentWeapon)
也就是说,名为append
的函数接受三个int并返回三个int的元组。您得到的错误可能是因为Swift看到定义append(T)->()
,并抱怨您返回了3个组件,而不是零
您可以尝试通过添加括号来传递元组,但这将失败,因为Swift将单个元组视为参数列表,因此它会查找不存在的签名append(Int,Int,Int)->()
:
func append(Int, Int, Int) -> (Int, Int, Int)
正确的解决方案看起来与您所做的非常接近(可能您被暗示了该方向):
这告诉Swift,您的意思是tuple实际上是一个tuple,它成功地找到了签名:append((Int,Int,Int))->()
作为旁注,元组用于传输数据,而不是存储数据。如果您希望此数据长期存在,则应将其放入结构中:
playerOneArray.append((currentRoom, currentPerson, currentWeapon) as (Int,Int,Int))
append
正在获取三个参数,而不是一个元组。试试这个:
playerArray.append((currentRoom,currentPerson,currentArray))
看起来您缺少参数。append((a,b,c)as(Int,Int,Int,Int))
swiftc在调用中返回一个错误缺少参数#2。
。它试图将元组扩展为三个参数。@Brian,是的,这是正确的,append方法足够智能,可以识别元组的参数,因此您可以简单地传递3个整数。我已经更新了我的代码。
playerOneArray.append((currentRoom, currentPerson, currentWeapon) as (Int,Int,Int))
struct Player {
var person:Int
var weapon:Int
var room:Int
}
var playerOneArray:[Player] = []
let player = Player(
person: everyPicker.selectedRowInComponent(0),
weapon: everyPicker.selectedRowInComponent(1),
room: everyPicker.selectedRowInComponent(2))
playerOneArray.append(player)