1.链接字符串用法
var str1 = "我"
var actionStr = "在"
var sthStr = "吃苹果"
var allStr = str1 + actionStr + sthStr //可以直接相加
allStr += ",吃完了苹果"//+= 也可以连接字符串
2.判断字符串
if allStr == "我在吃苹果"{ //直接可以等号
print(allStr)
}
if allStr.isEmpty {//判断是否是空字符串
print("allstr is empty")
}
3.截断字符串
/* 字符串截取 */ 错误写法
var str:String = "Hello, World!"
println(str.substringToIndex(3))
println(str.substringFromIndex(3))
然而,奇怪的是第三种方法却怎么也用不了
var r = NSRange(location: 1,length: 2)
调用substringWithRange() 函数总是语法有误:
var str1:String = str.substringWithRange(r) //语法有误!
解决方案:
解决方案(一):把String类的变量转存为NSString类型【不推荐】
var nsString: NSString = str
println(nsString.substringWithRange(r))
解决方案(二):对String类进行扩展,重载substringWithRange()
extension String {
func substringWithRange(range: NSRange) -> String! {
var str1 = self.substringFromIndex(range.location)
var str2 = str1.substringToIndex(range.length)
return str2
}
有了这个扩展,就可以按照NSString的方式来截取字符串啦!
完整演示代码:
var str:String = "Hello, World!"
/* import Foundation之前,子串截取方法不能使用 */
// println(str.substringToIndex(3)) //error
// println(str.substringFromIndex(3)) //error
import Foundation
/* import Foundation之后,下面这两个函数可以直接使用 */
println(str.substringToIndex(3))
println(str.substringFromIndex(3))
var r:NSRange = NSMakeRange(3,5)
/* String类的变量不能直接这样取中间子串 */
// println(str.substringWithRange(r)) //error
// 解决方案(一):转换为NSString类的
var nsString: NSString = str
println(nsString.substringWithRange(r))
// 解决方案(二):扩展String类
extension String {
func substringWithRange(range: NSRange) -> String! {
var str1 = self.substringFromIndex(range.location)
var str2 = str1.substringToIndex(range.length)
return str2
}
}
println(str.substringWithRange(r))
还没有结束。。。。。。。。。。。。。。。。。。。。。。。。。。。
为什么系统的方法不能 用呢?
其实还是能用的,大招来了。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
llStr = allStr.substringWithRange( Range<String.Index> (start: advance(allStr.startIndex, 0), end: advance(allStr.endIndex, -3)))
//完全正确 没有报错。Rang返回的就是<String>Index>类型,
让我们来看看 advance()is what??
/// Return the result of advancing `start` by `n` positions. If `T`
/// models `RandomAccessIndexType`, executes in O(1). Otherwise,
/// executes in O(`abs(n)`). If `T` does not model
/// `BidirectionalIndexType`, requires that `n` is non-negative.
func advance<T : ForwardIndexType>(start: T, n: T.Distance) -> T
官方解释是返回一个位置,对的就是一个location,对于OC大家很熟悉的NSRang的第一个参数,
然而咋SwiftRang中的第二个参数也是一个location,还是觉得别扭,好吧。但是用2月就很OK了。
完整代码如下:
var str1 = "我"
var actionStr = "在"
var sthStr = "吃苹果"
var allStr = str1 + actionStr + sthStr //拼接字符串
allStr += ",吃完了苹果"
if allStr == "我在吃苹果"{//判断是否相等
print(allStr)
}
if allStr.isEmpty {//判断是否是空串
print("allstr is empty")
}
println(allStr)
allStr = allStr.substringWithRange( Range<String.Index> (start: advance(allStr.startIndex, 0), end: advance(allStr.endIndex, -3)))//大家熟悉的OC中的SubStringWithRange 哈哈
if str1 == "我" {
print(allStr)
}
//advance(allStr.startIndex, 2) 这只是一个位置,就是allStr字符串的开始向右移动2的单位的位置
好了,大部分用常用的都已经说了,谢谢观看。