【问题标题】:Cannot convert value of type 'Int' to expected argument type '@noescape (Int?) throws -> Bool'无法将“Int”类型的值转换为预期的参数类型“@noescape (Int?) throws -> Bool”
【发布时间】:2015-12-23 04:17:09
【问题描述】:

我想检查smallestArr 是否包含-1,如果它至少包含一个-1,请调用placeBlocks。我需要继续调用 placeBlocks 直到数组填满,这意味着他们输掉了比赛。

我收到的错误是

无法将“Int”类型的值转换为预期的参数类型 '@noescape (Int?) throws -> Bool'

var smallestArr = [Int?](count: 25, repeatedValue: -1)

while smallestArr.contains(-1){
    placeBlocks()
}

【问题讨论】:

标签: arrays swift swift2


【解决方案1】:

尝试将[Int?] 更改为[Int](非可选数组成员)

var smallestArr = [Int](count: 25, repeatedValue: -1)
while (smallestArr.contains(-1)) {
    placeBlocks()
}

请注意,来自 SO 线程 How do you check an array to see if it contains a nil value? 的 karthik:s 回答建议您切换到使用 -1 而不是 nil 作为“非分配”。如果您使用该方法,那么smallestArr 没有理由是可选的:使用[Int] 而不是[Int?]

题外话:另请注意,在当前形式下,此闭包可能会以无限循环结束(因此也许应该将smallestArr 传递给peaceBlocks 以可能将-1 条目翻转为其他值?)。

【讨论】:

  • 使用[Int] 数组,smallestArr.contains(-1) 也可以工作。
  • @MartinR 你是对的,当我在我的操场上尝试时一定犯了一些错误(我觉得这很奇怪,因为我在 12 分钟前错误地验证了事实并非如此!)。谢谢。
  • @MartinR 有人在我写我的时候发布了一个答案,那是正确的(但后来被删除了?),但是由于我的游乐场冒险我认为我写的那个不同。是你吗?在这种情况下,我会删除这个,你可以取消删除你的。
  • @MartinR 好的。哦,那我去睡觉了。再次感谢您的评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-02
  • 1970-01-01
  • 1970-01-01
  • 2019-05-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多