[Swift]使用区间作为函数的参数

最近在一个查询数据库的方法里加上指定查询范围的参数时, 考虑使用Range类型,但在设置时,提示下面的错误:

[Swift]使用区间作为函数的参数_第1张图片

即:

Reference to generic type 'Range' requires arguments in <...> 

根据提示添加相应的代码后:

这时有点懵逼了,里面的参数该怎么写呢? 原谅我没有这样使用过Range, 查了些资料也没找到相应的介绍, 本打算使用NSRange代替, 但是,既然swift中有这个类型,还是想使用这个类型.
就继续查资料... ...
后来,偶然发现,他是要你指定区间的类型, 也可以说是区间元素的类型, 直接给个整形** Int** :

这样就OK了!!!
其实,在我们设置数组类型或者字典类型时,也会遇到这种提示,只不过,那两个用的比较多,没想到Range还需要指定元素类型(不是只有整形嘛? 好吧, 那是其他语言, swift支持的格式比较多).

附加:

按照上面的参数设置,可以实现区间的功能,但是参数的构造只能是这样来获得实例 :

let range = Range(uncheckedBounds: (lower: 10, upper: 20))
// 调用方法
someObj.selectPart(range, fromTable: "table")

这样虽然能满足需求, 但是我更喜欢这样来设置区间:

let range = 10...20 

这样的话,上面的参数类型就不满足要求了,这时,可以这样设置:

func selectPart(_ range: CountableClosedRange, fromTable table: String) -> [LZDataModel]?

这样在调用的时候,就可以如下使用:

someObj.selectPart(10...20, fromTable: "table")

是不是很方便?

需要注意的是, 类型CountableClosedRange只能接收一个闭区间的参数,即: 10...20 这样的;
如果想使用前闭后开区间,即这样的: 10..<20,可使用CountableRange来修饰,上面的函数名称可修改为:

func selectPart(_ range: CountableRange, fromTable table: String) -> [LZDataModel]?
// 调用
someObj.selectPart(10..<20, fromTable: "table")

(完)

你可能感兴趣的:([Swift]使用区间作为函数的参数)