Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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进行数组追加时出现意外错误 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

即使我去掉as int,int,int,仍然有一个错误,我不知道为什么会发生这种情况。如果我拿走它,就会出现访问协议“int”的成员的错误。未实现。

您没有关闭
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)