Swift-字符串扩展

Swift中如果想获取字符串中的某个字符,通过Index索引获取,先来简单看一下几个简单的字符串获取字符的方法:

var str="My name is FlyElephant"
//start
var char=str.characters[str.startIndex]
print("\(char)")
//middle
var advance=str.characters[str.startIndex.advancedBy(3)]
print("\(advance)")

//end
var end=str.characters[str.endIndex.predecessor()]
print("\(end)")

var startIndex=str.startIndex.advancedBy(0)
var endIndex=str.startIndex.advancedBy(6)
var rangeContent=str[Range(startIndex...endIndex)]
print("\(rangeContent)")

第一个方法获取的是第一个字符,如果想往后获取,需要通过advancedBy往后获取,注意如果获取最后一个字符,还需要调用一下predecessor方法:


FlyElephant.png

我们来看一下下面的实现方式:

var exChar:Character=str[0]
print("Extension:\(exChar)")

var stContent:String=str[3]
print("Extension:\(stContent)")

var range=Range(11...21)
var strRange=str[range]
print("Extension:\(strRange)")

获取结果:


FlyElephant.png

上面的写法比较简单,我们需要扩展String,代码参考如下:

extension String {
    
    subscript(index:NSInteger)->Character {
        return self[self.startIndex.advancedBy(index)]
    }
    
    subscript(index:NSInteger)->String {
        return String(self[index] as Character)
    }
    
    subscript(range:Range<NSInteger>)->String {
        let start = startIndex.advancedBy(range.startIndex)
        let end = start.advancedBy(range.endIndex-range.startIndex)
        return self[Range(start..<end)]
    }
}

Swift 3.0 扩展方法修改如下:

extension String {
    
    subscript(index: Int) -> Character {
        let position = self.index(self.startIndex, offsetBy: index)
        return self[position]
    }
    
    subscript(index: Int) -> String {
        return String(self[index] as Character)
    }
    
    subscript(range: Range<Int>) -> String {
        let start = self.index(self.startIndex, offsetBy: range.lowerBound)
        let end = self.index(start, offsetBy: range.upperBound - range.lowerBound)
        return self[Range(start..<end)]
    }
    
}

字符串转为Bool也可以扩展:

    var boolValue: Bool {
        return NSString(string: self).boolValue
    }
    
    func toBool() -> Bool? {
        switch self {
        case "True", "true", "yes", "1":
            return true
        case "False", "false", "no", "0":
            return false
        default:
            return nil
        }
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转载自:https://github.com/Tim9Liu9/TimLiu-iOS 目录 UI下拉刷新模糊效果A...
    袁俊亮技术博客阅读 11,962评论 9 105
  • 因为要结局swift3.0中引用snapKit的问题,看到一篇介绍Xcode8,swift3变化的文章,觉得很详细...
    uniapp阅读 4,512评论 0 12
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,245评论 4 61
  • 一是手里拿个手机,二是脑子里有个剧场。 ―失眠的人无非有两种 之前是阳光、空气和水,现在是空...
    爱吃素的肉食动物阅读 275评论 0 0
  • 我喜欢有交待的人,某人一去就没有了消息,就让我慢慢等着是吧。 广州三号北延长线,上下班高峰期,人多到真的实在是不敢...
    小木头君阅读 156评论 0 0