Swift: 无法将类型 'Range<Int>' 的值转换为指定类型 'Int'
Swift: Cannot convert value of type 'Range<Int>' to specified type 'Int'
我试图实现一个小迭代,returns 某些范围的平方。
这应该是这个 Python 脚本的等价物
for i in range(n):
print(i*i)
在Swift我试过了
第一次尝试
let numbers = [1..<10]
for i in numbers{
print(i*i)
}
和
第二次尝试
let numbers = [1..<10]
for i in numbers{
var j: Int = i
print(j*j)
}
但是编译器说
Cannot convert value of type 'Range<Int>' to specified type 'Int'
根据我的 python 经验,我了解到这是由于 Swift 中的不同类型造成的。因此我的问题是
- 我该如何解决这个问题? (即实现我在 python 中所做的相同事情)
- 我的第一次和第二次尝试有什么问题?
- 为什么Swift中有这么多类型的
<Int>
?
提前致谢!
您的代码无法编译,因为您在范围内使用了 []
,这会创建一个数组。 [1..<10]
是范围的 数组 。然后 for 循环遍历该数组,该数组只有一个元素 - 范围 1..<10
.
这就是为什么 i
是 Range<Int>
类型的原因。是范围,不是范围内的数字。
只需删除 []
,您的两个代码都可以工作。您可以直接迭代范围(实际上,任何符合 Sequence
协议的东西),而不仅仅是数组。您甚至可以将范围内嵌在循环中:
for i in 0..<10 {
print(i * i)
}
Why are there so many types of <Int>
in Swift?
你看错了,Range<Int>
和 ClosedRange<Int>
类型中的 Range
和 ClosedRange
不是修饰 [=23= 的词],好像它们是 Int
的不同“口味”。它是相反的 - Range<Bound>
and ClosedRange<Bound>
are generic types,并且 Range<Int>
可以被认为是 Range
的特定“类型”,它以 Int
为边界。例如,您也可以使用 Range<Float>
或 Range<UInt8>
。
我试图实现一个小迭代,returns 某些范围的平方。
这应该是这个 Python 脚本的等价物
for i in range(n):
print(i*i)
在Swift我试过了
第一次尝试
let numbers = [1..<10]
for i in numbers{
print(i*i)
}
和
第二次尝试
let numbers = [1..<10]
for i in numbers{
var j: Int = i
print(j*j)
}
但是编译器说
Cannot convert value of type 'Range<Int>' to specified type 'Int'
根据我的 python 经验,我了解到这是由于 Swift 中的不同类型造成的。因此我的问题是
- 我该如何解决这个问题? (即实现我在 python 中所做的相同事情)
- 我的第一次和第二次尝试有什么问题?
- 为什么Swift中有这么多类型的
<Int>
?
提前致谢!
您的代码无法编译,因为您在范围内使用了 []
,这会创建一个数组。 [1..<10]
是范围的 数组 。然后 for 循环遍历该数组,该数组只有一个元素 - 范围 1..<10
.
这就是为什么 i
是 Range<Int>
类型的原因。是范围,不是范围内的数字。
只需删除 []
,您的两个代码都可以工作。您可以直接迭代范围(实际上,任何符合 Sequence
协议的东西),而不仅仅是数组。您甚至可以将范围内嵌在循环中:
for i in 0..<10 {
print(i * i)
}
Why are there so many types of
<Int>
in Swift?
你看错了,Range<Int>
和 ClosedRange<Int>
类型中的 Range
和 ClosedRange
不是修饰 [=23= 的词],好像它们是 Int
的不同“口味”。它是相反的 - Range<Bound>
and ClosedRange<Bound>
are generic types,并且 Range<Int>
可以被认为是 Range
的特定“类型”,它以 Int
为边界。例如,您也可以使用 Range<Float>
或 Range<UInt8>
。