swift 3获取子字符串的开始索引(如int)

swift 3获取子字符串的开始索引(如int),swift,indexing,substring,swift3,Swift,Indexing,Substring,Swift3,我想得到字符串中子字符串的开始和结束位置。示例:在字符串“hi this is my name”中;如果我提供字符串“this”,我想知道开始索引是4,结束索引是7 我找到了几个链接,包括以下链接: 字符串中的子字符串 但它在swift 3中不起作用,因为该方法现在称为range 我现在用的是: let range = mystring.range(of: "StringSearch")?.lowerBound 哪个返回这个 Swift.String.UnicodeScalarView.In

我想得到字符串中子字符串的开始和结束位置。示例:在字符串“hi this is my name”中;如果我提供字符串“this”,我想知道开始索引是4,结束索引是7

我找到了几个链接,包括以下链接:

字符串中的子字符串

但它在swift 3中不起作用,因为该方法现在称为range

我现在用的是:

let range = mystring.range(of: "StringSearch")?.lowerBound
哪个返回这个

Swift.String.UnicodeScalarView.Index(_position: 15), _countUTF16: 1))
我不能得到整数的位置,因为这是一个索引

总之,我希望在int类型的变量中有位置,在本例中是15

有人能帮我吗

谢谢大家。

使用
String
方法计算差异 两个
String.Index
值之间:

let mystring = "hi this is my name"
if let range = mystring.range(of: "this") {
    let startPos = mystring.distance(from: mystring.startIndex, to: range.lowerBound)
    let endPos = mystring.distance(from: mystring.startIndex, to: range.upperBound)
    print(startPos, endPos) // 3 7
}
实际上,它只是将调用转发到字符串的
CharacterView
,所以 上面给出的结果与

let mystring = "hi this is my name"
if let range = mystring.range(of: "this") {
    let startPos = mystring.characters.distance(from: mystring.characters.startIndex, to: range.lowerBound)
    let endPos = mystring.characters.distance(from: mystring.characters.startIndex, to: range.upperBound)
    print(startPos, endPos) // 3 7
}

如果需要字符串的所有匹配项:

let mystring = "this is this and that is that"
var searchPosition = mystring.startIndex
while let range = mystring.range(of: "this", range: searchPosition..<mystring.endIndex) {
    let startPos = mystring.distance(from: mystring.startIndex, to: range.lowerBound)
    let endPos = mystring.distance(from: mystring.startIndex, to: range.upperBound)
    print(startPos, endPos)

    searchPosition = range.upperBound
}
let mystring=“这就是这个,那就是那个”
var searchPosition=mystring.startIndex

当让range=mystring.range(of:“this”时,range:searchPosition..将Martin R中的答案改编成一个函数后,第一次出现的是
NSRange
。您也可以将其变成
字符串的
扩展

public class func indexOf(string: String, substring: String) -> NSRange? {
    if let range = string.range(of: substring) {
        let startPos = string.distance(from: string.startIndex, to: range.lowerBound)
        return NSMakeRange(startPos, substring.count)
    }
}

您希望索引、字符、Unicodescalar或UTF-16代码单位使用什么单位?所有将字符串拆分为子字符串的
String
相关方法都希望使用这种索引类型。如果您需要
Int
索引来使用
NSString
方法,请摆脱
NSString
嗨。我希望获得该职位(15岁以上)在int类型的var中,这样我就可以在另一个方法中使用。我需要lowerbound.position之类的东西,如果还有一个“this”,你想找到第二个“this”的开始和结束索引呢?返回一个简单的int怎么样?