最近在一个查询数据库的方法里加上指定查询范围的参数时, 考虑使用Range类型,但在设置时,提示下面的错误:
即:
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<Int>, fromTable table: String) -> [LZDataModel]?
这样在调用的时候,就可以如下使用:
someObj.selectPart(10...20, fromTable: "table")
是不是很方便?
需要注意的是, 类型CountableClosedRange<Int>只能接收一个闭区间的参数,即: 10...20 这样的;
如果想使用前闭后开区间,即这样的: 10..<20,可使用CountableRange<Int>来修饰,上面的函数名称可修改为:
func selectPart(_ range: CountableRange<Int>, fromTable table: String) -> [LZDataModel]?
// 调用
someObj.selectPart(10..<20, fromTable: "table")