首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Swift字符串中查找字符索引

在Swift字符串中查找字符索引
EN

Stack Overflow用户
提问于 2014-06-04 12:42:24
回答 22查看 252.9K关注 0票数 213

是时候承认失败了..。

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

代码语言:javascript
运行
复制
NSString* str = @"abcdefghi";
[str rangeOfString:@"c"].location; // 2

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

代码语言:javascript
运行
复制
var str = "abcdefghi"
str.rangeOfString("c").startIndex

...but只给了我一个String.Index,我可以用它下标回到原始字符串中,但不能从中提取位置。

FWIW,该String.Index有一个名为_position的私有ivar,其中包含正确的值。我就是不明白它是怎么暴露出来的。

我知道我可以很容易地将它添加到字符串中。我更好奇的是我在这个新的API中遗漏了什么。

EN

回答 22

Stack Overflow用户

发布于 2014-08-06 13:10:05

代码语言:javascript
运行
复制
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
    }
}
票数 23
EN

Stack Overflow用户

发布于 2015-08-29 05:19:38

我为swift2找到了这个解决方案:

代码语言:javascript
运行
复制
var str = "abcdefghi"
let indexForCharacterInString = str.characters.indexOf("c") //returns 2
票数 16
EN

Stack Overflow用户

发布于 2014-06-04 12:47:49

我不确定如何从String.Index中提取位置,但如果您愿意退回到一些Objective-C框架,您可以桥接到objective-c,并以您过去使用的方式完成它。

代码语言:javascript
运行
复制
"abcdefghi".bridgeToObjectiveC().rangeOfString("c").location

看起来有些NSString方法还没有(或者可能不会)移植到字符串中。包含也会出现在我的脑海中。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24029163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档