最近在一個查詢數據庫的方法里加上指定查詢范圍的參數時, 考慮使用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")