加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

数组 – 理解Swift中元组数组的语法

发布时间:2020-12-14 02:24:12 所属栏目:百科 来源:网络整理
导读:我试图理解 Swift中元组数组的语法: 如果我创建一个元组: var gameScore: (points: Int,player: String) 我可以分配这样的值: gameScore = (1700,"Lisa") 并创建一个这个元组的数组: var gameScores = [gameScore] 我可以这样追加到数组: gameScores.ap
我试图理解 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")]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读