在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
字符串截取方法是字符串处理中经常使用的基本方法。熟悉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)) |
请发表评论