您的位置:首页 > 移动开发 > Swift

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

2014-07-04 23:38 405 查看
字符串截取方法是字符串处理中常用的基本方法。熟悉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))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: