String 在OC和Swift中的区别

前言

在上家公司面试的时候,在跟一个朋友闲聊的时候,想确定一下怎么甄别面试者Swift的水平如何,得到了这个话题。当时作为已经一个使用Swift语言开过项目两年多的我,第一个反应就是String在Swift里面是String,在Objective-C里面是NSString咯,用法什么的大概都一个熊样子咯。囧~

正文

相同点

Swift中,String保留了大部分的NSString的API。如:

判断字符串内容是否以某字符串开始

1
hasPrefix

判断字符串内容谁否以某字符串结尾

1
hasSuffix

将字符串中的字母转成小写字母

1
lowercased

将字符串中的字母转成大写字母

1
capitalized

将字符串分割成数组的

1
components(separatedBy:)

除了以上这些外,还有一些常规的操作,在Swift中使用StringNSString都是可以的。

不同点

  • SwiftString是值类型,Objective-CNSString是引用类型(值类型在传值的时候通过拷贝出不同的实例来传值,改变一个实例的属性等并不会在其他实例上体现;引用类型在传值的时候通过引用,相当于拷贝了指针以牙膏,不同变量所指向的同一个实例改变里面的属性个等会影响到所有);

  • StringNSString的长度比较方法是不一样的,在String中的是使用count来计算长度的,在NSString中是使用length来计算长度的;

  • StringNSString比较字符串是否相同的方法也是不一样的,在String中是使用==来比较的,而在NSString中却需要isEqualToString来比较;

  • StringNSString比较字符串是否为空的方法更不一样咯,String可以通过isEmpty来判断是否为空,NSString是通过判断是否为null,然后判断长度的。

  • NSString中可以同基本数据类型间进行转化,如:

    1
    2
    3
    let strA: NSString = "12333"
    let intOfStr = strA.integerValue
    let doubleOfStr = strA.doubleValue
  • 在字符串拼接一块,StringNSString也是不一样的,使用String拼接字符串只需要+来拼接就行了。