Swift字串截取方法的改進

來源:互聯網
上載者:User

標籤:swift   字串截取   ios   substringwithrange   string   

字串截取方法是字串處理中常用的基本方法。熟悉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 = strprintln(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))  //errorimport 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 = strprintln(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))








相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.