在swift中创建随机数组的最短代码?
我想创建一个随机数组(Int,Int32)
我尝试了以下方法: map(1...1000) { arc4random() } 但它返回以下错误: error: type 'ClosedInterval<T>' does not conform to protocol 'SequenceType' 我做错了什么? 出于某种原因,对我的第一次尝试的一个小调整似乎工作得很好 map(1...1000) { $0 - $0 + arc4random() } 现在的问题是,我不明白为什么这个调整接近有效,为什么最初的方法不… 有任何想法吗? 解决方法
斯威夫特愿意推断类型,但它只能在它放弃之前处理这么多的歧义.
在map(1 … 100){arc4random()}的情况下,对于类型是什么有太多的不确定性.具体来说,整数文字1和100.它们可以是Int,Int8,UInt32 …有时Swift将默认为Int,但如果语句中存在更多歧义,它可能会失去平衡并拒绝. 在这种情况下,在同一个语句中,它试图找出{arc4random()}的类型.它应该能够推断出返回类型是UInt32,因为这是arc4random返回的内容.但输入类型是什么?你没有在表达式中使用它,所以没关系,但是Swift必须做些什么,而且它不知道是什么. 编写{$0 – $0 arc4random()}的原因是它有助于确定$0的类型 – 它必须是一个UInt32,因为这是你可以添加到arc4random输出的唯一东西.这使得关闭UInt32的类型 – > UInt32的.这意味着1和100的类型也必须是UInt32.这意味着1 … 10必须是一个范围 最后,您收到有关ClosedInterval不符合SequenceType的投诉的原因是因为…运算符有两种可能的返回类型 – Range和ClosedInterval.你想要一个Range但是Swift不知道 – 它不能使Range或ClosedInterval工作. Swift编译器错误倾向于列出许多可能无效的选项之一,通常不是您尝试的选项,这可能有点令人困惑. 不使用$0 – $0技巧解决这个问题的更好方法可能是这样的: let a = map(1...100) { _ in arc4random() } _表示你不关心闭包的输入.提供一个输入参数(甚至是一个匿名的参数)似乎足以让Swift放松一点,默认为Int为两个整数文字. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |