随着苹果公司对 swift 的开源、集成到 iCloud 和 OS X 中等系列支持,注定了 swift 编程语言将成为未来的主流编程语言。既然 swift 即将成为码农界的主流语言,我们又还有什么理由不深入学习它呢?今天小编和大家分享的就是 swift 中,String 和 NS-XXX 系列的互相转换相关知识,一起来看看吧。
接下来介绍的 swift 类型主要包括 String, NSString, NSURL, NSData 这几种,String 是 Swift 的字符串类型,封装得很豪华但各种概念多用起来有点麻烦;NSString 是 OC 里面的字符串,但有很多实用且方便的 API;NSData 其实属于无差别的 Data 类型,存储字符串的话是 RawData,有点像 C 语言里面的 string,其实是数据块;NSURL 专门用来表示网络地址,有一些网络相关 API。
首先,我们来定义几个变量:
var str = “测试”
var data :NSData?
var nstr : NSString?
var url : NSURL?
NSString 和 String 的转换
NSString 和 String 就是兄弟,可以简单地直接赋值或者强制类型转换:
nstr = str
str = String(nstr)
NSURL 和其他类型的转换
从 String 到 NSURL 使用初始化函数即可,但 NSURL 由于是网络传递用字符串,编码使用 UTF8,如果原始地址 String 中有中文字符,直接转换会返回 nil,所以需要先将 String 转换一下编码。而对于 NSString,则可以简单地强制换为 String 操作。
let utf8str = str.stringByAddingPercentEncodingWithAllowedCharacters(.URLHostAllowedCharacterSet())!
nstr = utf8str
url = NSURL(string: utf8str)
url = NSURL(string: String(nstr!))
NSURL 转换成 String 或 NSString 也是使用相应的初始化函数(不考虑编码)
str = String(url!)
nstr = NSString(string: url!.absoluteString)
NSData 和其他类型的转换
理论上来说 NSData 可以是任何数据,有时候我们需要其数据层面的操作 API,又需要解读数据里面的文本,那么需要将 NSData 转换为其他类型。将字符串转换成 Data 的接口都是同一个 dataUsingEncoding,记得不要弄错编码,编码不同会改变数据。
data = str.dataUsingEncoding(NSUTF8StringEncoding)
data = nstr?.dataUsingEncoding(NSUTF8StringEncoding)
data = url?.absoluteString.dataUsingEncoding(NSUTF8StringEncoding)
而有时候我们需要自己填充数据,再转换为字符串,这种时候以填充 Ascii 码值比较多,毕竟汉字和 Unicode 的编码规则比较复杂,不过也是可以用的:
let byte :[UInt8] = [0xe4, 0x8d, 0xa9, 0x20, 0xe3, 0x8e, 0x8f]
data = NSData(bytes: byte, length: byte.count)
str = String(data: data!, encoding: NSUTF8StringEncoding)!
nstr = NSString(data: data!, encoding: NSUTF8StringEncoding)
url = NSURL(dataRepresentation: data!, relativeToURL: nil)
上面的做法是先将一个 Uint8 数组填充好,转化为 NSData,然后再变成需要的字符串。
以上就是 swift 中,String 和 NS-XXX 系列的互相转换的相关操作,希望可以帮助大家更好的学习 swift 这门语言。
相关文章:《Swift 2.0 final 关键字详解》
http://www.maiziedu.com/group/article/10134/
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于