微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

数组 – 理解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")]

游乐场错误是:

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] 举报,一经查实,本站将立刻删除。

相关推荐