数组 – 理解Swift中元组数组的语法
我试图理解
Swift中元组数组的语法:
如果我创建一个元组: var gameScore: (points: Int,player: String) 我可以分配这样的值: gameScore = (1700,"Lisa") 并创建一个这个元组的数组: var gameScores = [gameScore] 我可以这样追加到数组: gameScores.append((1650,"Bart")) 这样: gameScore = (1600,"Maggie") gameScores += [gameScore] 但不是这样的: gameScores += [(1600,"Maggie")] 游乐场错误是:
但是,这种方式有效: gameScores += [(points: 1600,player: "Maggie")] 是的 – 我上面的代码可以使用,但是我想弄清楚我在错误的语法中没有理解的东西.元素不需要为.append()方法命名,但需要为= [()]命名.
Swift类型的推理系统正在被拉伸到这里.在你的例子中,Swift无法推断出[(1600,“Maggie”)]的类型.如果你给它一些更多的信息,你的例子将编译:
gameScores += [(1600,"Maggie") as (points: Int,player: String)] gameScores += [(1600,"Maggie")] as [(points: Int,player: String)] 和 gameScores = gameScores + [(1600,"Maggie")] 全部编译. 当涉及到=时,似乎Swift无法推断出类型. 看看=的定义: func +=<C : Collection>(lhs: inout Array<C.Iterator.Element>,rhs: C) 表明lhs和rhs的类型不同. Swift无法根据给出的信息协调lhs和rhs的类型.它似乎从rhs开始,然后得出结论左侧的类型是inout _并且它试图将其与gameScores的类型进行协调,即[(points:Int,player:String)].它应该能够推断出类型吗?也许,但在这种情况下,由于您有一个简单的解决方法,我说给编译器一个中断并给它显式类型信息并使其工作更容易: gameScores += [(points: 1600,player: "Maggie")] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |