是时候承认失败了……

在Objective-C中,我可以使用如下内容:

NSString* str = @"abcdefghi";
[str rangeOfString:@"c"].location; // 2

在Swift中,我看到了类似的东西:

var str = "abcdefghi"
str.rangeOfString("c").startIndex

...但这只是给了我一个字符串。索引,我可以使用它下标回原始字符串,但不能从中提取位置。

FWIW,字符串。Index有一个名为_position的私有ivar,其中有正确的值。我只是不明白怎么会暴露出来。

我知道我自己可以很容易地将其添加到String中。我更好奇在这个新的API中我缺少了什么。


当前回答

如果你想使用熟悉的NSString,你可以显式地声明它:

var someString: NSString = "abcdefghi"

var someRange: NSRange = someString.rangeOfString("c")

我还不确定如何在Swift中做到这一点。

其他回答

String是NSString的桥接类型,add

import Cocoa

到你的swift文件,并使用所有“旧”的方法。

最简单的方法是:

在Swift 3中:

 var textViewString:String = "HelloWorld2016"
    guard let index = textViewString.characters.index(of: "W") else { return }
    let mentionPosition = textViewString.distance(from: index, to: textViewString.endIndex)
    print(mentionPosition)

我玩以下的游戏

extension String {
    func allCharactes() -> [Character] {
         var result: [Character] = []
         for c in self.characters {
             result.append(c)
         }
         return 
    }
}

直到我理解提供的一个,现在它只是字符数组

let c = Array(str.characters)

如果您正在寻找简单的方法来获得字符或字符串的索引,请检查这个库http://www.dollarswift.org/#indexof-char-character-int

您也可以使用另一个字符串或正则表达式模式从字符串中获取indexOf

与Objective-C中的NSString相比,Swift中的变量类型String包含不同的函数。Sulthan提到过,

Swift String没有实现RandomAccessIndex

你能做的是向下转换你的变量类型String到NSString(这是有效的Swift)。这将给你访问NSString中的函数。

var str = "abcdefghi" as NSString
str.rangeOfString("c").locationx   // returns 2