zoukankan      html  css  js  c++  java
  • 【iOS】Swift字符串截取方法的改进

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








  • 相关阅读:
    我受不了了,可能拿不到毕业证了
    [My B.S paper draft]我的本科答辩论文草稿
    Memory Dog for Autodesk Maya
    Silent Hill 5 Bug
    AMPAS/ASC Common File Format LUT
    CUDAAccelerated LUT Converter for DI Workflow
    Forking AfterBurn into Maya
    nicEdit上传图片无法显示的问题
    用插值的方法进行直方图平滑
    一个新的做presentation的利器
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5115624.html
Copyright © 2011-2022 走看看