代码之家  ›  专栏  ›  技术社区  ›  jbrown94305

将Objective-C中的NSRange转换为Swift

  •  1
  • jbrown94305  · 技术社区  · 10 年前

    如何将其转换为Swift:

    NSString *searchString = [NSString stringWithFormat:@"%@", @"Apple_HFS "];
    NSRange range = [tempString rangeOfString:searchString];
    NSUInteger *idx = range.location + range.length;
    

    谢谢

    3 回复  |  直到 9 年前
        1
  •  1
  •   Rob Md Fahim Faez Abir    10 年前

    如果您使用 String ,你可以参考 endIndex :

    let searchString: String = "Apple_HFS "
    if let range: Range<String.Index> = tempString.rangeOfString(searchString) {
        let index = range.endIndex
        let stringAfter = tempString.substringFromIndex(index)
        // do something with `stringAfter`
    } else {
        // not found
    }
    

    我包括了这些类型,这样你就可以看到发生了什么,但通常我只会写:

    let searchString = "Apple_HFS "
    if let range = tempString.rangeOfString(searchString) {
        let stringAfter = tempString.substringFromIndex(range.endIndex)
        // do something with `stringAfter`
    } else {
        // not found
    }
    
        2
  •  1
  •   lchamp    10 年前

    这就是你要找的吗?

    var str : NSString = "A string that include the searched string Apple_HFS inside"
    
    let searchString : NSString = "Apple_HFS "
    let range : NSRange = str.rangeOfString(searchString) // (42, 10)
    let idx : Int = range.location + range.length // 52
    

    演示: http://swiftstub.com/831969865/

        3
  •  0
  •   Bartłomiej Semańczyk    9 年前

    简单的解决方案 不使用任何对象方法或类型:

    假设您有:

    let nsrange = NSRange(location: 3, length: 5)
    let string = "My string"
    

    现在你需要转换 NSRange Range :

    let range = Range(start: advance(string.startIndex, nsrange.location), end: advance(string.startIndex, nsrange.location + nsrange.length))