72

我正在使用以下代码:

var continousDigitsRange:Range<Int> = Range<Int>(start: 0, end: 0)

自从更新到 Xcode 7.3 (Swift 2.2) 我得到了以下提示:

'init(start:end:)' 已弃用:它将在 Swift 3 中删除。使用 '..<' 运算符。

对我来说,不清楚如何使用“使用 '..<' 运算符正确“翻译”它。

4

6 回答 6

88

你应该简单地写

var continousDigitsRange1:Range<Int> = 0..<0

或者如果你想更简单

var continousDigitsRange = 0..<0
于 2016-03-22T14:59:40.517 回答
35

另外值得注意的是,对于substringWithRange一个字符串,您现在可以使用

let theString = "Hello, how are you"
let range = theString.startIndex.advancedBy(start) ..< theString.startIndex.advancedBy(end)
theString.substringWithRange(range)
于 2016-03-22T15:34:08.033 回答
8

封闭范围运算符(a...b)定义从 a 到 b 的范围,并包括值 a 和 b。a 的值不能大于 b。

半开范围运算符(a..<b)定义从 a 到 b 的范围,但不包括 b。之所以说它是半开的,是因为它包含它的第一个值,但不包含它的最终值。与封闭范围运算符一样,a 的值不得大于 b。如果 a 的值等于 b,则结果范围将为空。

Swift 编程语言 (Swift 2.2) - 基本运算符

var continousDigitsRange:Range<Int> = Range<Int>(start: 0, end: 0)
--to--
var continousDigitsRange:Range<Int> = 0..<0
于 2016-03-22T15:07:51.427 回答
2

完整显示bmichotte的答案...

let theString = "Hello, how are you today my friend"
    let start = 3
    let end = 15
    let range = theString.startIndex.advancedBy(start) ..< theString.startIndex.advancedBy(end)
    let p = theString.substringWithRange(range)
    print("this is the middle bit>\(p)<")

这产生了这是中间位> lo,如何<

于 2016-04-05T11:36:07.250 回答
1

参考 swift 3.0 补充几点

//可数范围示例。

let range1 = 0..<5

可数封闭范围示例

let range2 = 0...5

//范围从边界

let range = Range(uncheckedBounds: (range1.lowerBound,range1.upperBound))

//从substringRange获取距离。

let str = "Hello, how are you"
let substringRange = str.characters.indices

// 低于 Swift 3.0

let length = substringRange.distance(from: substringRange.startIndex, to: substringRange.endIndex)

//对于 Swift 3.0

let length2 = str.distance(from: substringRange.startIndex, to: substringRange.endIndex)
于 2016-06-20T13:25:30.913 回答
1

我一直有一个函数来获取字符串的子字符串范围。这是我为 Swift 3 更新的函数:

func getSubStringRange(fullString: String, fromIndex: Int, subStringSize: Int) -> Range<String.Index> {
    let startIndex = fullString.characters.index(fullString.startIndex, offsetBy: fromIndex)
    let endIndex = fullString.characters.index(startIndex, offsetBy: subStringSize)

    let subStringRange = startIndex..<endIndex

    return subStringRange
}

该函数非常自我解释 - 你传入一个字符串(fullString),子字符串开始的那个字符串的索引(fromIndex)以及子字符串有多大(subStringSize)。

例子:

let greeting = "Hi, my name is Nathaniel"
let getName = greeting[getSubStringRange(fullString: greeting, fromIndex: 15, subStringSize: 9)]

print("Name: \(getName)")

-> 打印:“姓名:纳撒尼尔”

于 2016-06-22T10:44:45.647 回答