您的位置:首页 > 移动开发 > Swift

Swift学习笔记3——String和Character

2015-09-26 18:15 295 查看
为啥String和Character要单独拿出来讲呢?因为和C区别蛮大的,而且经常用到。感觉Swift的String还是没有Java的String好用。比如截串就是个麻烦的事情。以后String可能还会更新,让String变得更加好用。

需要注意的是,Swift中的String是值传递。附上String 的定义就明白了。

public struct String {
/// An empty `String`.
public init()
}


开始就是创建字符串,最简单的方法如下

var str = "I  am a string"
//创建空串的两种方法,二者是一样的
var emptyStr1 = ""
var emptyStr2 = String()


Character相比于C和java来讲有区别,如果要创建一个Character,必须显式声明类型

var c1:Character = "c"  //注意是双引号
var c2 = "c"  //c2被认为是String类型
var c3 = 'c'  //编译错误


Character可以赋值为Unicode

let eAcute: Character = "\u{E9}"      // é


改变String,这个语法和java一样的,不过内存管理层面已经是不同的对象了。

var str:String = "first"
var c1:Character = "c"  //注意是双引号
var c2 = "c"  //c2被认为是String类型
str += "sceond"   //str变为firstsceond,此时的str和之前的str内存地址不同
str += c2     //str变为firstc,此时的str和之前的str内存地址不同
str.appendContentsOf("second") // 和使用+=是一样的
str.appendContentsOf(c2)  //和使用+=是一样的
str.append(c1);  //添加Character的方法


遍历String字符的两种方法

var str:String = "first"
for c in str.characters {
print(c)
}
for index in str.characters.indices {
    print(str[index])
}


获取String长度的办法

var s = "dfe"
print(s.characters.count)  //3


String的Index,这个蛋疼啊!不像java里面的Index直接就是一个数字。String的Index是在不同的extension中定义的。

先来看获得String里面的某个字符的过程,蛋疼。直接上官方文档

let greeting = "Guten Tag!"
greeting[greeting.startIndex]
// G
greeting[greeting.endIndex.predecessor()]
// !
greeting[greeting.startIndex.successor()]
// u
let index = greeting.startIndex.advancedBy(7)
greeting[index]
// a


得到Index的方法现在我只知道两个

str.startIndex  //指向第一个字符
str.endIndex //这个指向的并不是String最后一个字符,而是最后一个字符的index+1


想要获得其他的index只能用advancedBy等三个方法来间接获得。如果有遗漏,欢迎指正

str.startIndex.successor()  //后一个index
str.endIndex.predecessor()  //前一个index
var inde = str.startIndex.advancedBy(1)  //后一个index,输入负数的话向前。关于advancedBy这个方法,以前是advance这个方法,现在不能用了


所以想要截串的话,就要通过上面那些蛋疼的方法来获得index后截取

//截串的三个方法
str.substringWithRange(aRange: Range<Index>)
str.substringFromIndex(index: Index) //包含fromIndex那个字符
str.substringToIndex(index: Index)  //不包含toIndex那个字符


利用上面的方法截串例子

var str = "123456789"
var range = Range<String.Index>(start:str.startIndex.advancedBy(1),end:str.endIndex.advancedBy(-4))
print(str.substringWithRange(range))  //输出 2345


另外一种方法就是将String转换为NSString,然后调用NSString的截串方法

var str = "123456789"
var ns = (str as NSString).substringWithRange(NSMakeRange(1, 4))
print(ns) //输出  2345
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: