字符串截取方法是字符串处理中经常使用的基本方法。熟悉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. 黑马day16 jquery&amp;层次选择器

    假设想通过DOM元素之间的层次关系来获取特定元素,比如后代元素,子元素,相邻元素,兄弟元素等,则须要使用层次选择器. 1 .ancestor descendant 使用方法: $("form ...

  2. mysql的用户管理(二)

    与权限相关的表由于经常需要用到,所以mysql直接将这些表在mysql启动时写到了内存中,避免每次验证权限时再从磁盘写数据. 当以下条件发生时发refresh权限表信息到内存: 1.对帐户的更改时,如 ...

  3. 【Lucene】近实时搜索

    近实时搜索:可以使用一个打开的IndexWriter快速搜索索引的变更内容,而不必首先关闭writer,或者向该writer提交:这是2.9版本之后推出的新功能. 代码示例(本例参考<Lucen ...

  4. 内嵌W5100的网络模块WIZ812MJ--数据手册

    1.简介 WIZ812MJ是一款内嵌了W5100(TCP/IP硬件芯片,内置PHY).MAG-JACK(带变压器的RJ45)和其他胶连逻辑的网络模块.它可以当作一个组件使用,而且不需要为W5100和变 ...

  5. Hadoop自定义Counter

    1.通过enum自定义Counter public static num LOG_PROCESSOR_COUNTER { BAD_RECORDS }; 2.在Mapper或者Reducer中操作Cou ...

  6. MySQL里求给定的时间是所在月份的第几个礼拜

    Share 一个昨天写的函数. 目的是求给定的时间是所在月份的第几个礼拜. DELIMITER $$ USE `t_girl`$$ DROP FUNCTION IF EXISTS `weekofmon ...

  7. 【linux】内核+文件系统下载到开发板

    K开发 欢迎转载,转载时请保留作者信息,谢谢. 邮箱:tangzhongp@163.com 博客园地址:http://www.cnblogs.com/embedded-tzp Csdn博客地址:htt ...

  8. 俄罗斯方块SDK版

    前言 本来可以从俄罗斯方块控制台版改一版, 将UI接口换掉, 变成SDK版. 正好放假了, 有时间. 就用了一个星期来重头做一个新版, 享受一下静下心来, 有条不紊干活的感觉^_^ 这个工程用来验证S ...

  9. 使用iframe设置frameset的高度

    index.html的页面代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "htt ...

  10. HDU3709:Balanced Number(数位DP+记忆化DFS)

    Problem Description A balanced number is a non-negative integer that can be balanced if a pivot is p ...