在 swift 中创建随机数数组的最短代码?
shortest code to create an array of random numbers in swift?
我想创建一个随机数数组 (Int, Int32)
我尝试了以下方法:
map(1...1000) { arc4random() }
但它 returns 出现以下错误:
error: type 'ClosedInterval<T>' does not conform to protocol 'SequenceType'
我做错了什么?
出于某种原因,对我的第一次尝试稍作调整似乎效果很好
map(1...1000) { [=2=] - [=2=] + arc4random() }
现在的问题是,我不明白为什么这种调整后的方法有效,为什么初始方法不起作用...
有什么想法吗?
Swift愿意推断类型,但只能处理这么多歧义就放弃了。
在 map(1...100) { arc4random() }
的情况下,关于类型的不确定性太多了。具体来说,整数文字 1 和 100。它们可能是 Int
、Int8
、UInt32
……有时 Swift 会默认为 Int
,但如果在它可能会失去平衡并拒绝的声明。
在这种情况下,在同一条语句中,它试图找出 { arc4random() }
的类型。它应该能够推断出 return 类型是 UInt32
因为那是 arc4random
return 的类型。但是输入类型是什么?你没有在表达式中使用它,所以没关系,但是 Swift 必须让它成为某种东西,它不知道是什么。
写 { [=19=] - [=19=] + arc4random() }
修复它的原因是帮助确定 [=20=]
的类型 - 它必须是 UInt32
因为这是你唯一可以添加的东西arc4random
的输出。所以这使得闭包的类型 UInt32 -> UInt32
。这意味着 1
和 100
的类型也必须是 UInt32
。这意味着 1...10
必须是 Range
最后,您收到有关 ClosedInterval
不符合 SequenceType
的投诉的原因是因为 ...
运算符有两种可能的 return 类型 – Range
和 ClosedInterval
。你想要一个 Range
但 Swift 不知道 - 它不能使 Range
或 ClosedInterval
工作。 Swift 编译器错误往往会列出许多可能不起作用的选项之一,通常不是您要尝试的选项,这可能有点令人困惑。
解决此问题而不诉诸 [=37=] - [=37=]
技巧的更好方法可能是这样的:
let a = map(1...100) { _ in arc4random() }
_
表示您不关心闭包的输入。提供一个输入参数(即使是匿名的)似乎足以让 Swift 放松一点,并默认为 Int
两个整数文字。
我想创建一个随机数数组 (Int, Int32)
我尝试了以下方法:
map(1...1000) { arc4random() }
但它 returns 出现以下错误:
error: type 'ClosedInterval<T>' does not conform to protocol 'SequenceType'
我做错了什么?
出于某种原因,对我的第一次尝试稍作调整似乎效果很好
map(1...1000) { [=2=] - [=2=] + arc4random() }
现在的问题是,我不明白为什么这种调整后的方法有效,为什么初始方法不起作用...
有什么想法吗?
Swift愿意推断类型,但只能处理这么多歧义就放弃了。
在 map(1...100) { arc4random() }
的情况下,关于类型的不确定性太多了。具体来说,整数文字 1 和 100。它们可能是 Int
、Int8
、UInt32
……有时 Swift 会默认为 Int
,但如果在它可能会失去平衡并拒绝的声明。
在这种情况下,在同一条语句中,它试图找出 { arc4random() }
的类型。它应该能够推断出 return 类型是 UInt32
因为那是 arc4random
return 的类型。但是输入类型是什么?你没有在表达式中使用它,所以没关系,但是 Swift 必须让它成为某种东西,它不知道是什么。
写 { [=19=] - [=19=] + arc4random() }
修复它的原因是帮助确定 [=20=]
的类型 - 它必须是 UInt32
因为这是你唯一可以添加的东西arc4random
的输出。所以这使得闭包的类型 UInt32 -> UInt32
。这意味着 1
和 100
的类型也必须是 UInt32
。这意味着 1...10
必须是 Range
最后,您收到有关 ClosedInterval
不符合 SequenceType
的投诉的原因是因为 ...
运算符有两种可能的 return 类型 – Range
和 ClosedInterval
。你想要一个 Range
但 Swift 不知道 - 它不能使 Range
或 ClosedInterval
工作。 Swift 编译器错误往往会列出许多可能不起作用的选项之一,通常不是您要尝试的选项,这可能有点令人困惑。
解决此问题而不诉诸 [=37=] - [=37=]
技巧的更好方法可能是这样的:
let a = map(1...100) { _ in arc4random() }
_
表示您不关心闭包的输入。提供一个输入参数(即使是匿名的)似乎足以让 Swift 放松一点,并默认为 Int
两个整数文字。