是时候承认失败了..。
在Objective-C中,我可以使用如下内容:
NSString* str = @"abcdefghi";
[str rangeOfString:@"c"].location; // 2
在Swift中,我看到了类似的东西:
var str = "abcdefghi"
str.rangeOfString("c").startIndex
...but只给了我一个String.Index
,我可以用它下标回到原始字符串中,但不能从中提取位置。
FWIW,该String.Index
有一个名为_position
的私有ivar,其中包含正确的值。我就是不明白它是怎么暴露出来的。
我知道我可以很容易地将它添加到字符串中。我更好奇的是我在这个新的API中遗漏了什么。
发布于 2014-08-06 13:10:05
extension String {
// MARK: - sub String
func substringToIndex(index:Int) -> String {
return self.substringToIndex(advance(self.startIndex, index))
}
func substringFromIndex(index:Int) -> String {
return self.substringFromIndex(advance(self.startIndex, index))
}
func substringWithRange(range:Range<Int>) -> String {
let start = advance(self.startIndex, range.startIndex)
let end = advance(self.startIndex, range.endIndex)
return self.substringWithRange(start..<end)
}
subscript(index:Int) -> Character{
return self[advance(self.startIndex, index)]
}
subscript(range:Range<Int>) -> String {
let start = advance(self.startIndex, range.startIndex)
let end = advance(self.startIndex, range.endIndex)
return self[start..<end]
}
// MARK: - replace
func replaceCharactersInRange(range:Range<Int>, withString: String!) -> String {
var result:NSMutableString = NSMutableString(string: self)
result.replaceCharactersInRange(NSRange(range), withString: withString)
return result
}
}
发布于 2015-08-29 05:19:38
我为swift2找到了这个解决方案:
var str = "abcdefghi"
let indexForCharacterInString = str.characters.indexOf("c") //returns 2
发布于 2014-06-04 12:47:49
我不确定如何从String.Index中提取位置,但如果您愿意退回到一些Objective-C框架,您可以桥接到objective-c,并以您过去使用的方式完成它。
"abcdefghi".bridgeToObjectiveC().rangeOfString("c").location
看起来有些NSString方法还没有(或者可能不会)移植到字符串中。包含也会出现在我的脑海中。
https://stackoverflow.com/questions/24029163
复制相似问题