String是Swift里新增加的类型,它与原来的NSString可以很方便地互相转换。但在实际开发中,我们该如何选择?

1,能使用String类型就尽量使用String类型,原因如下:
(1)现在Cocoa里所有的API都能接受和返回String类型,所以也没必要特地转换下。
(2)Swift的String是struct,而NSString类是NSObject,所以String更符合字符串“不变”这一特性。同时,在不触及NSString特有操作和动态特性的时候,使用String的方法,在性能上也会有所提升。
(3)由于String实现了像CollectionType这样的接口,所以有些Swift的语法特性只有String才能使用,而NSString却没有。
比如for...in的枚举遍历所有字符
1
2
3
4
let words = "Hangge.com"
for i in words{
    print(i)  //Hangge.com
}

2,要使用NSString的情况

(1)String有hasPrefix/hasSuffix方法用来判断是否以某字符串开头或结尾,但却没有containsString方法判断内部是否包含另一个字符串。但这个方法NSString却有,所有我们只能先将String转换成NSString。
1
2
3
4
let words = "Hangge.com"
if (words as NSString).containsString("ge"){
    println("Yes") //YES
}

(2)String与Range配合比较麻烦,比如下面截取字符串的一部分,分别用转换成NSString再截取和直接使用String截取做演示,大家可以自行比较。(这个也只是麻烦些,其实问题也不大)

1
2
3
4
5
6
7
8
9
10
let words = "Hangge.com"
 
//先转换成NSString
var rangeStr1 = (words as NSString).substringWithRange(NSMakeRange(4,2)) //ge
 
//不转换
let index = advance(words.startIndex, 4)
let index2 = advance(words.startIndex, 6)
var range = Range<String.Index>(start: index, end: index2)
var rangeStr2 = words.substringWithRange(range) //ge

Swift - String与NSString的区别,以及各自的使用场景的更多相关文章

  1. swift4之String与NSString的区别与使用

    String是结构体,NSString是类,这是它们的根本区别. 在 Swift 中,结构体struct是值类型,String是结构体,所以也是值类型.值类型被赋予给一个变量.常量或者被传递给一个函数 ...

  2. Swift中String和NSString的一个不同之处

    我们知道在Swift中String和NSString是可以互相转换使用的-额-应该是在绝大数情况下可以互相转换使用.在某些情况下可能还有一丝丝略微的差别:比如在涉及到处理字符串中字符索引的时候. 我们 ...

  3. iOS - Swift String 字符串

    前言 public struct String public class NSString : NSObject, NSCopying, NSMutableCopying, NSSecureCodin ...

  4. String,StringBuffer,StringBuilder的区别

    public static void main(String[] args) { String str = new String("hello...."); StringBuffe ...

  5. JAVA中String与StringBuffer的区别

    String和StringBuffer的区别,网上资料可以说是数不胜数,但是看到这篇文章,感觉里面做的小例子很有代表性,所以转一下,并自己做了一点总结. 在java中有3个类来负责字符的操作. 1.C ...

  6. String 和 StringBuffer的区别

    String与StringBuffer的区别:            简单地说,就是一个常量和变量的关系.StringBuffer对象的内容可以修改:而String对象一旦产生后就不可以被修改,重新赋 ...

  7. [置顶] String StringBuffer StringBuilder的区别剖析

    这是一道很常见的面试题目,至少我遇到过String/StringBuffer/StringBuilder的区别:String是不可变的对象(final)类型,每一次对String对象的更改均是生成一个 ...

  8. string与stringbuilder的区别

    1.分析string与stringbuilder的区别,我们先来看下面一段代码 首先我们使用string进行字符串的拼接 class Program { static void Main(string ...

  9. String,StringBuffer,StringBuilder的区别及其源码分析

    String,StringBuffer,StringBuilder的区别这个问题几乎是面试必问的题,这里做了一些总结: 1.先来分析一下这三个类之间的关系 乍一看它们都是用于处理字符串的java类,而 ...

随机推荐

  1. 物流追踪 - -GPS和GPRS应用

    源码1: #include<stdio.h> #include<stdlib.h> #include<string.h> #include<termios.h ...

  2. Ajax以及类似百度搜索框的demo

    public class Ajax01 extends HttpServlet{ @Override protected void service(HttpServletRequest request ...

  3. [转] iOS应用架构谈 网络层设计方案

    原文地址:http://casatwy.com/iosying-yong-jia-gou-tan-wang-luo-ceng-she-ji-fang-an.html iOS应用架构谈 开篇 iOS应用 ...

  4. tar 基础

    如何安装---> 出门右转百度. 1.基本使用方式 tar [option] desc_file source_file desc_file 表示要生成的打包文件:source_file 表示需 ...

  5. Java -- sleep and wait

    1.二者的来源 sleep(),是Thread下面的静态方法/静态本地方法. wait(),是Object()的final方法. 2.源码分析 a.sleep() public static void ...

  6. 笔记之Cyclone IV 第一卷第二章Cyclone IV器件的逻辑单元和逻辑阵

    逻辑单元 (LE) 在 Cyclone IV 器件结构中是最小的逻辑单位.LE 紧密且有效的提供了高级功能的逻辑使用.每个 LE 有以下特性 ■ 一个四口输入的查找表 (LUT),以实现四种变量的任何 ...

  7. SQLite3的使用(用到了dll)good

    1.下载sqlite3相关文件sqlite3.dll.sqlite3.h(可从http://download.csdn.net/detail/mingxia_sui/5249070下载),添加到工程的 ...

  8. 基于visual Studio2013解决算法导论之018栈实现(基于链表)

     题目 用链表实现栈 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <time.h> #in ...

  9. Qt 释放新建窗口资源

    当Widget *w = new Widget(); 不方便调用 delete w;时 Widget *w = new Widget(); w->setAttribute(Qt::WA_Dele ...

  10. C# 课堂总结1-二进制转换

    一.目的:便于计算机表示,稳定性好,符合逻辑运算,真为1,假为0. 二.各进制表示方法: 2进制:0,1 8进制:0-7 16进制:0-9,A,B,C,D,E,F 二.转换方法: 1.各进制转换为10 ...