我试图理解
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")]
游乐场错误是:
Playground execution Failed: error: Tuples Playground.playground:38:1: error: cannot convert value of type ‘[(points: Int,player: String)]’ to expected argument type ‘inout _’
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")]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。