【问题标题】:Swift error Type 'T' does not conform to protocol 'IntegerLiteralConvertible'Swift 错误类型“T”不符合协议“IntegerLiteralConvertible”
【发布时间】:2014-08-14 18:55:06
【问题描述】:

我想用下面的代码片段将一个数字分解为其主要因素,但我不完全理解给定的错误消息(见上面的标题)。首先我尝试使用字典,但我被困在按键排序这本字典上。其次,我尝试了元组版本,但现在我遇到了编译器错误。

谁能看出以下代码片段的最后一行有什么问题?

var pfc : [(prime: Int, count: Int)] = []
pfc.append(prime: 2, count: 2)
pfc += [(prime: 3, count: 4)]
var p = 5, c = 1
pfc.append(prime: p, count: c)

在堆栈溢出中,可以找到关于 String.Index 的类似问题,但答案还没有给我足够的线索。因此,非常欢迎任何帮助,在此先感谢!

【问题讨论】:

  • pfc.append((prime: p, count: c)) 有效吗?
  • append 一直对元组数组有点古怪。此行为请file a bug
  • @sanz:不:pfc.append((prime:p, count:c)) 不起作用,但是 pfc += [(prime:p, count:c)] 确实起作用!注意:我使用的是 Xcode6 Beta5。
  • @Nate 我把这个 bug 提交给了 Apple(我的第一个),很好奇他们用它做了什么。感谢您的提示(和 URL)。
  • 在开发这些 beta 版本时,他们似乎确实在响应 Swift 问题。即使它作为副本被关闭,它仍然很有价值,因为他们可以了解有多少人遇到了问题。 FWIW,我认为第二行和最后一行都应该出错,因为您没有将元组传递给 append() 方法,而是单独的参数。

标签: compiler-errors swift tuples


【解决方案1】:

这很有趣,就像 Nate 提到的那样,似乎有问题。我能够通过一些不同的语法来解决它。

var pfc : [(prime: Int, count: Int)] = []

pfc.append(prime: 2, count: 2)

pfc += [(prime: 3, count: 4)]

var p = 5
var c = 1

var tuple = (prime: p, count: c)

pfc += [tuple]

pfc

【讨论】:

  • 谢谢@Chris,我使用了以下代码片段,没有编译器问题:pfc += [(prime: p, count: c)]; var newElement = (prime: p, count:c); pfc += [新元素]
【解决方案2】:

我认为您应该将元组放在两组括号中,而不是一组。

var pfc : [(prime: Int, count: Int)] = []
pfc.append((prime: 2, count: 2))
pfc += [(prime: 3, count: 4)]
var p = 5, c = 1
pfc.append((prime: p, count: c))

我认为编译器认为您想要调用一个名为 Array.append(prime: Int, count: Int) 的方法,但找不到该类型 Array 的方法

【讨论】:

  • 不幸的是 pfc.append((prime: p, count: c)) 给了我以下编译器错误(使用 Xcode6 Beta5)“在调用中缺少参数‘count’的参数”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多