字符串截取方法是字符串处理中经常使用的基本方法。熟悉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))

【iOS】Swift字符串截取方法的改进的更多相关文章

  1. Shell脚本字符串截取方法总结

    Shell脚本8种字符串截取方法总结转自:https://www.cnblogs.com/ralphdc/p/8032335.html Linux 的字符串截取很有用.有八种方法.假设有变量 var= ...

  2. Shell脚本8种字符串截取方法总结

    Linux 的字符串截取很有用.有八种方法. 假设有变量 var=http://www.aaa.com/123.htm. 1. # 号截取,删除左边字符,保留右边字符. 代码如下: echo ${va ...

  3. Linux 的字符串截取方法(转)

    Linux 的字符串截取很有用.有八种方法. 假设有变量 var=http://www.aaa.com/123.htm. 1. # 号截取,删除左边字符,保留右边字符. echo ${var#*//} ...

  4. shell脚本中8种字符串截取方法_转自脚本之家

    转自:http://www.jb51.net/article/56563.htm 参考:http://blog.csdn.net/taiyang1987912/article/details/3955 ...

  5. NSString字符串截取方法

    1.字符串 1> 字符串比较 NSString *a = @“hello”; NSString *b = [NSString stringWithFormat:@hello”]; if (a = ...

  6. 判断字符串中是否包含指定的内容&&字符串截取方法比较说明

    1.使用indexOf()方法 方法说明: 作用:indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置(从前向后查找). 语法:stringObject.indexOf(searc ...

  7. Swift字符串截取与Range使用

    1.String.Index String.Index表示一个位置,使用String与String.Index可以获取该位置的Character let str = "123456789&q ...

  8. db2字符串截取方法及常用函数

    select substr(index_code, 1, locate('-', index_code)-1) from report_data substr(str,m,n)表示从str中的m个字符 ...

  9. swift字符串截取实例

    截取字符串 let deviceStr = deviceInfoLabel.attributedText?.string var device  = "" if let len : ...

随机推荐

  1. Android 代码混淆

    什么是代码混淆 Java 是一种跨平台的.解释型语言,Java 源代码编译成中间”字节码”存储于 class 文件中.由于跨平台的需要,Java 字节码中包括了很多源代码信息,如变量名.方法名,并且通 ...

  2. linux工具:ssh---未完

    ssh server_ip 或者 ssh username@server_ip 或者 ssh username@server_name , 再按提示输入密码. ____________________ ...

  3. Charles_N:HTTP请求响应监听工具

    Charles:HTTP请求响应监听工具使用说明.doc   1.    介绍 Charles是一个HTTP代理服务器,HTTP监视器,反转代理服务器.它允许一个开发者查看所有连接互联网的HTTP通信 ...

  4. 关于wxFileSystemWatcher输出文件名的解决方法

    本文针对的wxWidgets版本: 2.9.4, 2.9.5,其他版本未作测试. 如果要使用 wxFileSystemWatcher 并且让其产生的wxFileSystemWatcherEvent 事 ...

  5. MyEclipse弹出提示窗体

    MyEclipse弹出提示窗体 1.弹窗例如以下

  6. 经典排序算法 - 基数排序Radix sort

    经典排序算法 - 基数排序Radix sort 原理类似桶排序,这里总是须要10个桶,多次使用 首先以个位数的值进行装桶,即个位数为1则放入1号桶,为9则放入9号桶,临时忽视十位数 比如 待排序数组[ ...

  7. ASP.NET - Eval数据绑定

    <!--新闻分类--> <div id ="category" class ="Frm"> <h4>新闻分类</h4& ...

  8. 更快地从IplImage转换成QImage

    转:http://blog.sina.com.cn/s/blog_5c70dfc80100qzif.html 在Qt平台上使用OpenCV肯定会遇到从IplImage到QImage的转换问题,找了很多 ...

  9. Silverlight技术调查(2)——跨域访问

    原文 Silverlight技术调查(2)——跨域访问 此调查web容器采用的是Tomcat,若允许所有域访问,只需在webapps下的根应用ROOT中,加入配置文件:clientaccesspoli ...

  10. 软考之路(四)---软件project一 概念模型,逻辑模型,物理模型

    自从接触到数据库到如今这三个概念大家理解的还有些不清楚,今天来为大家解答疑惑,共同提高,结合生活理解 概念模型        概念模型就是在了解了用户的需求,用户的业务领域工作情况以后,经过分析和总结 ...