有妖气 发表于 2016-3-8 18:35:15

swift string以及NSstring的扩展

论坛里好像没有移动端开发的教程 最近在做IOS的开发,跟大家一起学习了
最近2天遇到了string里操作问题,可以理解为要用swift写出文本_取出中间文本 这个方法
但在swift里貌似行不通,因为他的index不是int类型(不要用易语言去理解swift 易语言封装太好导致容易编程,一开始我也是根据易语言的取出文本思路去写下图)


用string可以强制转换成NSstring的方式,用NSstring类去做,结果如下

class leyi {        func swiftJC ()    {      var s="1234567890"            var ns1=(s as NSString).substringFromIndex(5)      var ns2=(s as NSString).substringToIndex(4)            var ns3=(s as NSString).substringWithRange(NSMakeRange(4, 1))            print(ns1)//67890      print(ns2)//1234      print(ns3)//5    }}虽然nsstring的index 是int类型,然而发现他并不是我们想要的效果,因为他没有直接提供我们要搜索的前文本 后文本的坐标。 所以需要要有类似seach命令查看下NSstring的api文档在下眼拙,看了半天实在无法找到直接命令只好换string类去操作直接调用String的对应方法(推荐使用该方法),由于String对应的方法参数是String.Index类型而非Int类型,所以我们首先要创建String.Index类型参数值,代码如下:   funcswift2 ()        {      // var s="1234567890"            // let index = advance(s.startIndex, 5)swift 1.x      //let index2 = advance(s.endIndex, -6); swift 1.x                  var s="1234567890"            let index = s.startIndex.advancedBy(5) //swift 2.0+      let index2 = s.endIndex.advancedBy(-6) //swift 2.0+      var range = Range<String.Index>(start: index2,end: index)            var s1:String=s.substringFromIndex(index)      var s2:String=s.substringToIndex(index2)      var s3=s.substringWithRange(range)            print(s1)//67890      print(s2)//1234      print(s3)//5
    }创建string需要的index对象后,用range()来创建substringwithRange的range对象,虽然看起来解决了我们的问题,我们只需要用string.rangeofstring()来找出前文本 后文本,但调试后发现一个问题,我们无法指定他从哪个起始位置开始寻找后文本,这样会导致得出的文本并不是我们想要的,在翻遍了string的api后,恍然灵机一动,其实可以用上面2种方法结合起来就可以写出我们要的方法, 最终代码如下:class selfstring {        funcstringmid (wholestring:String,front:String,behind:String)->String    {
                  if wholestring.isEmpty      {         return("wholestring 不能为nil") //wholestring 不能为nil                  }else{            var whole:NSString=wholestring                                    let frontindex = whole.rangeOfString(front)            if frontindex.length > 0            {                whole = whole.substringFromIndex(frontindex.location + frontindex.length)                let behindindex = whole.rangeOfString(behind)                if behindindex.length > 0                {                  whole = whole.substringToIndex(behindindex.location)                                  return(whole as String)                                  } else {return("没有找到behind在wholestring")} //没有找到behind在wholestring                                           } else{return("没有找到front 在wholestring")}// 没有找到front 在wholestring                           }      

    }

用NSstring的rangeOfString 得到他的index,而nsstring的index是可以得到他的length和location且返回值是int类型,再用substringFromIndex 去掉前文本以及用substringToIndex去掉后文本,思路已经跟精益模块提供的思路不一样了,确实也没有办法 swift貌似无法做到直接从指定位置开始寻找,当然也有可能是我查看SDK文档不仔细,我想这门语言如此强大应该会有,本人小菜,如果有知道的同学请告诉我下
虽然整个程序比较简单,但还是发上来希望对大家有所帮助, 因为这个我花了2天时间才搞定,,哎。。。 英语不好是死穴o(╯□╰)o


揰掵佲 发表于 2016-3-8 23:32:21

{:4_90:}

云程万里鹏 发表于 2016-3-13 18:29:58

明白了,我是小C的小C
页: [1]
查看完整版本: swift string以及NSstring的扩展