查看了網(wǎng)上一些對(duì)它們的分析理解,有的地方驗(yàn)證了是錯(cuò)誤的。可能是swift版本不同的緣故吧,目前我是使用的swift5。改正一下。
//CountableClosedRange
let rangeA:ClosedRange= (1...5)
// ClosedRange:
let rangeB = (1.1...5.1)
//CountableRange
let rangeC =1..<5
// Range:
let rangeD =1.1..<5.1
print(type(of: rangeA))
print(type(of: rangeB))
print(type(of: rangeC))
print(type(of: rangeD))
輸出:
ClosedRange<Int>
ClosedRange<Double>
Range<Int>
Range<Double>
有人說(shuō)ClosedRange和Range不能遍歷循環(huán),其實(shí)不對(duì),如果把里面的元素?fù)Q成整數(shù),是同樣可以遍歷循環(huán)的。
swift截取字符串感覺(jué)有些麻煩,截取字符串寫(xiě)了個(gè)方法,此方法避免下標(biāo)越界造成崩潰:
func subClosedRange(bound:ClosedRange) ->String{
? ? ? ? var lower = bound.lowerBound
? ? ? ? var upper = bound.upperBound
? ? ? ? if lower > upper {
? ? ? ? ? ? (lower, upper) = (upper, lower)
? ? ? ? }
? ? ? ? I fupper >self.count{
? ? ? ? ? ? upper =self.count
? ? ? ? }
? ? ? ? let startIndex =self.index(self.startIndex, offsetBy: lower)
? ? ? ? let endIndex =self.index(self.startIndex, offsetBy: upper)
? ? ? ? return String(self[startIndex...endIndex])
? ? }
如果用range,最后的返回值修改為return String(self[startIndex..<endIndex]).半開(kāi)區(qū)間。
func subString(start:Int, end:Int) ->String{
? ? ? ? if start < end && (end - start) <= (self.count- start) {
? ? ? ? ? ? let startIndex =self.index(self.startIndex, offsetBy: start)
? ? ? ? ? ? let endIndex =self.index(self.startIndex, offsetBy: end)
? ? ? ? ? ? return String(self[startIndex..<endIndex])
? ? ? ? }
? ? ? ? return ""
? ? }
func subString(from:Int) ->String{
? ? ? ? if from >=self.count{
? ? ? ? ? ? return ""
? ? ? ? }
? ? ? ? let startIndex =self.index(self.startIndex, offsetBy: from)
? ? ? ? let endIndex =self.endIndex
? ? ? ? return String(self[startIndex..<endIndex])
? ? }
/// 根據(jù)時(shí)間格式獲取當(dāng)前時(shí)間的字符串
? ? ///
? ? /// - Parameter formatter: 時(shí)間格式化
? ? /// - Returns: 時(shí)間字符串
? ? static func getCurrentTime(formatter:String) ->String{
? ? ? ? let date =Date()
? ? ? ? let dateFormatter =DateFormatter()
? ? ? ? dateFormatter.locale=Locale.current
? ? ? ? dateFormatter.dateFormat= formatter
? ? ? ? return dateFormatter.string(from: date)
? ? }