• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

【iOS】Swift字符串截取方法的改进

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

字符串截取方法是字符串处理中经常使用的基本方法。熟悉iOS的朋友都知道在基础类的NSString中有substringToIndex:,substringFromIndex:以及substringWithRange:这三种主要的截取方法。


问题描写叙述:

那么,Swift语言中的String类是否有相同的截取功能呢?

重复查看String类的头文件。并没有找到同样或相似的函数接口。

直接在swift文件中也不能对一个String类的变量调用上面的方法。

然而通过引入基础框架,即

import Foundation

就能够使用前两个截取方法了:

/* 字符串截取 */
var str:String = "Hello, World!"
println(str.substringToIndex(3))
println(str.substringFromIndex(3))

然而,奇怪的是第三种方法却怎么也用不了。

不管是这样创建范围:

var r:NSRange = NSMakeRange(1,2)


还是这样创建范围:

var r = NSRange(location: 1,length: 2)


调用substringWithRange() 函数总是语法有误:

var str1:String = str.substringWithRange(r) //语法有误!

错误提示是:Cannot convert the expression's type 'String' to type 'Range<String.Index>'


可见是參数类型不符合,不大了解Range<String.Index>这个类型究竟能怎么搞出来,可是给出下面两种解决方式。


解决方式:


解决方式(一):把String类的变量转存为NSString类型

var nsString: NSString = str
println(nsString.substringWithRange(r))


当然这个方法有点赖,实质上已经不是String类的截取而是NSString类的截取了。并且每一个String类的都要转一下子。假设字符串一多,就略显麻烦。

有没有其他方法解决问题呢?以下给出第二个解决方式。


解决方式(二):对String类进行扩展,重载substringWithRange()

extension String {
    func substringWithRange(range: NSRange) -> String! {
        var str1 = self.substringFromIndex(range.location)
        var str2 = str1.substringToIndex(range.length)
        return str2
    }
}

有了这个扩展,就能够依照NSString的方式来截取字符串啦!


完整演示代码:

//
//  main.swift
//  Swift中字符串的截取方法
//
//  Created by 杜子兮 on 14-7-4.
//  Copyright (c) 2014年 lanou3g.com 蓝鸥 All rights reserved.
//

var str:String = "Hello, World!"

/* import Foundation之前,子串截取方法不能使用 */
// println(str.substringToIndex(3))    //error
// println(str.substringFromIndex(3))  //error

import Foundation

/* import Foundation之后,以下这两个函数能够直接使用 */
println(str.substringToIndex(3))
println(str.substringFromIndex(3))

var r:NSRange = NSMakeRange(3,5)

/* String类的变量不能直接这样取中间子串 */
// println(str.substringWithRange(r))  //error

// 解决方式(一):转换为NSString类的
var nsString: NSString = str
println(nsString.substringWithRange(r))

// 解决方式(二):扩展String类
extension String {
    func substringWithRange(range: NSRange) -> String! {
        var str1 = self.substringFromIndex(range.location)
        var str2 = str1.substringToIndex(range.length)
        return str2
    }
}
println(str.substringWithRange(r))









鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Swift Set 底层发布时间:2022-07-13
下一篇:
Swift模块化框架的实现以及模块之间的解藕发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap