swift 初见-4运算符与字符串操作
// Playground - noun: a place where people can play import UIKit //import Foundation var str = "Hello, playground" //swift 新运算符 Nil Coalescing Operator (nil聚合运算符) 二元运算符 它是为可选型数据来设计的,通常用在解包的过程中 // 示例: a??b ---> a!=nil? a! : b (a不为空就解包,否则返回默认值b) a必须是optional类型 ,b类型必须和a解包后的类型是一致的 // 实例: var name:String? name="andy" // 需要注意的时 name != nil 中!=与前后都有个空格否则会报错的,假如没有空格 name!变成了解包 // 无空格时:error: type '()' does not conform to protocol 'BooleanType' if name != nil{ println("hello,\(name)") // 这里加!号,前面讲过的 println("hello"+String(name!)) }else { println("hello,kim") } // 简化if代码-1: // 开发技巧:在元素前后分别留出一个空格间隔前后代码或符号 let myName:String=name != nil ? name! : "kim" println("hello"+myName) // 简化if代码-2 let myNames:String=name ?? "kim" println("hello"+String(myNames)) //这样就保证了myNames始终是个有意义的值 // 区间运算符 Range Operator 常用forin循环连用 // 闭区间 [a,b] ---->a...b //三点 // 前闭后开 [a,b)---->a..<b //两点 for indexs in 1...10 { indexs // indexs=10 error:error: cannot assign to 'let' value 'indexs' ,默认常量 } for indexs in 1..<10 { indexs // indexs=10 error:error: cannot assign to 'let' value 'indexs' ,默认常量 } //Logical Operator // !a a&&b a||b 注意 a & b , a | b这是位运算,不是逻辑运算 // String Mutability // var 声明的都是可变字符串 ,let 为不可变 // 遍历字符串 for c in str { println(c) //c为Character型 } // Character 类型 var ch:Character="!" //写个字符会报错 str.append(ch) println(str) // str +=ch //这样是不能的,类型不匹配 ,两个字符串可以 countElements(str) //计算长度,可以智能的把中文当做一个字符(底层语言中中文为unico符处理起来麻烦) var str1:NSString=str str1.length var str2="hello\u{1F496}" countElements(str2) //长度为6 var str3:NSString="hello\u{1F496}" str3.length // 长度为7,在这里可以发现swift处理字符串时比OC更具优势 let SFInt:Int = 2 let SFDouble:Double = 2; let SFBool:Bool=true; let SFTuple:(Int,Int) = (2,3) //元组 let SFOptional:Int?=nil let SFCharaceter:Character = "!" println("Bool:\(SFBool) \n Tuple:\(SFTuple)") // \n 换行 //String Comparing let stringA="abc" let stringB="abc" stringA==stringB let stringC="abd" let stringD="d" stringA<stringC stringA<stringD let array=["abc","abc","abc","abc"] for strs in array { // strs.hasSuffix("c") if(strs.hasPrefix("a")) { println("String=\(strs)") } } // 导入OC中得框架可以使用原来OC中得其他方法 stringA.capitalizedString stringA stringA.uppercaseString stringA.lowercaseString stringA // trim 操作 //对字符串的头尾进行截取,对中间是没有作用的 var stringE=" a b b c " stringE.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()) //该方法来自OC stringE stringE.stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString:"a")) // 不是从头开始的,无法截取 stringE.stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString:" a")) //注意是两个字符, a前面有个空格 // split stringE.componentsSeparatedByString(" ") stringE.componentsSeparatedByCharactersInSet(NSCharacterSet(charactersInString:"b")) //join var stringF="-" stringF.join(["1","2","3"]) // range stringE.rangeOfString("b") //返回的是可选型 ,返回第一个的位置 // 最新的swift语法 可能 rangeOfString返回的是元组(22,4),不再是23..<27的range ,这是网友提供的并没有经过验证!!!!!!!!!!! // 反向收索 stringE.rangeOfString("b", options: NSStringCompareOptions.BackwardsSearch) // 忽略大小写 stringE.rangeOfString("b", options: NSStringCompareOptions.CaseInsensitiveSearch) // String类型有个 String.Index索引 stringE.startIndex stringE.endIndex // < >为swift中泛型的概念 let stringRange = Range<String.Index>(start:stringE.startIndex,end:stringE.endIndex) let startIndex=str.startIndex // 注意它的0并不是整型0,而是String.Index类型 // 整型10 表示向后走10步 let endIndex:String.Index=advance(stringE.startIndex, 10) let seachIndex=Range<String.Index>(start: startIndex, end: endIndex) // 固定范围内搜索 stringE.rangeOfString("b", options:NSStringCompareOptions.CaseInsensitiveSearch, range: seachIndex) // subString var toIndex=advance(startIndex, 10) stringE.substringToIndex(toIndex) var fromIndex=advance(startIndex,13) stringE.substringFromIndex(fromIndex) // 返回的是从10 - 13 不包括第13个字符 stringE.substringWithRange(Range<String.Index>(start: toIndex, end: fromIndex)) //insert var insertIndex=advance(stringE.startIndex,5) stringE.substringFromIndex(fromIndex) //stringE.insert("!", atIndex: insertIndex) // stringE.removeAtIndex(insertIndex) // stringE.replaceRange(<#subRange: Range<String.Index>#>, with: <#C#>) // stringE.removeRange(<#subRange: Range<String.Index>#>)