如何从Swift中的函数返回Int范围?我搜索了Swift 2.1文档,网络,SO,并尝试了:
func myfunc() -> Range { // }
func myfunc() -> ( Int ... Int ) { // }
func myfunc() -> Range< Int > { // }
......和其他许多人......
很抱歉这里感到头疼,并提前感谢!
答案 0 :(得分:5)
你的第三个是正确的。这编译和工作,例如:
func oneTo10() -> Range<Int> {
return 1...10
}
答案 1 :(得分:2)
使用Swift 3时,Range
的范围比之前更小,并且与对应的ClosedRange
一致。您现在在标准库中还有CountableClosedRange
和CountableRange
符合Strideable
协议的对象(包括Int
)。
因此,根据您的需要,您可以按照以下示例之一的模式重构您的代码:
CountableClosedRange
func myfunc() -> CountableClosedRange<Int> {
return 1 ... 10
}
print(Array(myfunc())) // prints [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
CountableRange
func myfunc() -> CountableRange<Int> {
return 1 ..< 11
}
print(Array(myfunc())) // prints [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
ClosedRange
func myfunc() -> ClosedRange <Int> {
return 1 ... 10
}
Range
func myfunc() -> Range<Int> {
return 1 ..< 11
}
请注意,使用Swift 3时,Range
和ClosedRange
不符合Sequence
协议。因此,以下代码将无法编译:
func myfunc() -> Range<Int> {
return 1 ..< 11
}
print(Array(myfunc())) // error: Argument type 'Range<Int>' does not conform to expected type 'Sequence'
因此,除非您有充分的理由将Range
和ClosedRange
用于符合Strideable
(包括Int
)的类型,否则您应该依赖{{1他们和CountableRange
。